Invert a binary tree.
4 / \ 2 7 / \ / \ 1 3 6 9to
4 / \ 7 2 / \ / \ 9 6 3 1Trivia:
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.
思路一:如果是重新创建一个新的tree,是不是太简单了?
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
TreeNode* new_tree = dfs(root);
return new_tree;
}
TreeNode* dfs(TreeNode* root){
if(!root) return NULL;
TreeNode* new_node = new TreeNode( root->val);
new_node->right = dfs(root->left);
new_node->left = dfs(root->right);
return new_node;
}
};
思路二:显然出题者是要求你在原来数的基础上做操作。(在拜读其他同学的解法后发现,交换左右子数可以用std::swap(root->left,root->right);来实现)
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
dfs(root);
return root;
}
void dfs(TreeNode* root){
if(!root) return;
TreeNode* right = root->right;
root->right = root->left;
root->left = right;
dfs(root->left);
dfs(root->right);
}
};