您的位置:首页 > 其它

226. Invert Binary Tree

2016-07-15 10:31 183 查看

题目:Invert Binary Tree

原题链接

Invert a binary tree.



to



Trivia:

This problem was inspired by this original tweet by Max Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

反转一颗二叉树(即左子树和右子树交换,并且递归下去),最后谷歌还自黑了一把= =。

可以改变一下前序遍历的顺序来完成,即先遍历右子树再遍历左子树,然后新建一棵树按照正常的顺序来遍历建树就行,代码如下:

/**
* 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* travel(TreeNode* root){
if(root == NULL) return NULL;
TreeNode* node = new TreeNode(root -> val);
node -> left = travel(root -> right);
node -> right = travel(root -> left);
return node;
}
TreeNode* invertTree(TreeNode* root) {
TreeNode* node = travel(root);
return node;
}
};


网上还有一种直接用swap函数来递归的写法,看起来很简洁,一并贴出来:

/**
* 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){
invertTree(root -> left);
invertTree(root -> right);
std::swap(root -> left, root -> right);
}
return root;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息