解释:就是把一棵二叉树的左子树和右子树不停交换,还是挺简单的,代码如下:
/**
* 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(root == NULL) return NULL; //对应空树的情况
if(root->left == NULL && root->right == NULL) return root; //触底返回
if(root->left != NULL || root->right != NULL){
invertTree(root->left);
invertTree(root->right);
// 开始交换,即使有一遍兄弟为空,也要交换过去
TreeNode * node = root->left;
root->left = root->right;
root->right = node;
}
return root;
}
};
易错:
如果把交换的那部分代码写成这样,那么它只是交换了值,而非交换整个节点,会出错
int i = root->left->val;
root->left->val = root->right->val;
root->right->val = i;
此时那棵交换后的树是这样的:
image.png
出现的问题是1,3的双亲本来是2,现在变成了7,,9,6的双亲本来是7,现在变为2,也就是说孩子节点并没有跟着双亲节点走,所以不能只交换数字,而需要交换节点。
网友评论