反转左右子树 递归调用
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void mirror(TreeNode* root) {
if(root==nullptr)return;// 基本情况:空节点
//交换节点的左右子树
TreeNode*tmp=root->left;
root->left=root->right;
root->right=tmp;
//递归调用
mirror(root->left);
mirror(root->right);
}
};
leetcode226翻转二叉树
递归解析:
终止条件: 当节点 root 为空时(即越过叶节点),则返回 null 。
递推工作:
初始化节点 tmp ,用于暂存 root 的左子节点。
开启递归 右子节点 invertTree(root.right) ,并将返回值作为 root 的 左子节点 。
开启递归 左子节点 invertTree(tmp) ,并将返回值作为 root 的 右子节点 。
返回值: 返回当前节点 root 。
递归函数的返回值:invertTree 的返回值是 TreeNode*,即反转后的子树根节点。每次递归调用会返回反转后的左子树或右子树,然后将它们重新赋值给当前节点的左右子树。最终,递归返回的是整个反转后的树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode* tmp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmp);
return root;
}
};/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode* tmp = root->left;
root->left = invertTree(root->right);
root->right = invertTree(tmp);
return root;
}
};
区别/错误分析:mirror 函数是 void 类型的,而你在递归调用 mirror 时错误地试图将其返回值赋给 root->left 和 root->right。由于 mirror 函数的返回类型是 void,它不返回任何值,因此无法直接赋值给节点的 left 或 right。
class Solution {
public:
void mirror(TreeNode* root) {
if(root==nullptr) return;//base
TreeNode *tmp=root->left;
root->left=mirror(root->right);
root->right=mirror(tmp);
return root;
}