题目
翻转一棵二叉树。
思路
和反转有关的问题,我们可以看做一个递归问题,不断更换左右子树,当从上至下更换到根节点时,返回根节点即可
代码
/**
* 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:
TreeNode* invertTree(TreeNode* root) {
if(ç{
return root;
}
swap(root->left,root->right);
invertTree(root.left);
invertTree(root.right);
return root;
}
};
问题
这里面出现了两个问题
- 在二叉树操作中最好使用xx.left,xx.right对节点进行操作,在递归过程中起名会使得名称重复,出现无法预料的后果;
- 这是一个标准的递归操作,边界条件或者说是结束条件即为:(!root),既保证了当树为空时返回根节点,也保证了递归到最深层时可以及时的进行结束递归的操作。