Invert Binary Tree
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.反转一颗二叉树
C++
/**
* 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) return NULL;
stack<TreeNode*>s;
TreeNode* temp;
TreeNode* x;
s.push(root);
while(!s.empty()){
x=s.top();
s.pop();
temp=x->right; //交换左右子树
x->right=x->left;;
x->left=temp;
if(x->right) s.push(x->right);// 将非空的左右节点压入栈中
if(x->left) s.push(x->left);
}
return root;
};
};
/**
* 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) return NULL;
TreeNode* x=root->left;
TreeNode* y=root->right;
root->left=y;
root->right=x;
invertTree(root->left);
invertTree(root->right);
return root;
};
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param {TreeNode} root # 递归
# @return {TreeNode}
global invert
def invertTree(self, root):
invert(self,root);
return root
def invert(self,root):
if root==None:return None
root.left,root.right=root.right,root.left
invert(self,root.left)
invert(self,root.right)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param {TreeNode} root # 非递归
# @return {TreeNode}
def invertTree(self, root):
if root==None:return None
a=[]
a.append(root)
while len(a)!=0:
b=a[len(a)-1] #取栈顶元素
a.pop() #退栈
b.left,b.right=b.right,b.left #交换左右子树
if b.left!=None: a.append(b.left)
if b.right!=None: a.append(b.right)
return root