day15
前序遍历:
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr)
return root;
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->right);
return root; // 反转完返回根节点
}
};
后序遍历:
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr)
return root;
invertTree(root->left);
invertTree(root->right);
swap(root->left,root->right);
return root;
}
};
中序有点绕,不建议使用:(主要是交换结点以后,之前处理过的左子树跑到右边,如果继续处理右子树就重复处理了)
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr)
return root;
invertTree(root->left);
swap(root->left,root->right);
invertTree(root->left); // 两次都是left
return root;
}
};