Invert a binary tree.
<pre>
4
/
2 7
/ \ /
1 3 6 9
</pre>
to
<pre>
4
/
7 2
/ \ /
9 6 3 1
</pre>
解题思路
这道题是一道很明显的反转二叉树,将原先的左子树变为右子树(这不是废话嘛~)。
我们来递归考虑这一问题。首先,对于根节点,我们只需要将原值复制,再对它的孩子的情况进行判断,将左子树和右子树进行反转,接着对子树进行递归调用,就可以将整棵二叉树反转了。
代码
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == NULL){
return NULL;
}
TreeNode* res = new TreeNode(0);
invertBinaryTree(root,res);
return res;
}
void invertBinaryTree(TreeNode* root1, TreeNode* root2){
root2->val = root1->val;//复制原值
if (root1->left != NULL){
TreeNode* one = new TreeNode(0);
root2->right = one;
invertBinaryTree(root1->left, root2->right);
}
if (root1->right != NULL){
TreeNode* one = new TreeNode(0);
root2->left = one;
invertBinaryTree(root1->right, root2->left);
}
//左右子树调换并递归执行子树情况
}
};