题目: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;
}
};