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.
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
递归:
public TreeNode InvertTree(TreeNode root)
{
if(root==null)
return null;
TreeNode l=root.left;
TreeNode r=root.right;
root.left=InvertTree(r);
root.right=InvertTree(l);
return root;
}
非递归
借助队列 DFS
public TreeNode InvertTree(TreeNode root)
{
if (root == null)
return null;
Queue<TreeNode> q = new Queue<TreeNode>();
q.Enqueue(root);
TreeNode cur,tmp;
while (q.Count>0)
{
cur = q.Dequeue();
tmp = cur.left;
cur.left = cur.right;
cur.right = tmp;
if (cur.left != null)
q.Enqueue(cur.left);
if (cur.right != null)
q.Enqueue(cur.right);
}
return root;
}
或者栈 BFS
public TreeNode InvertTree(TreeNode root)
{
if (root == null)
return null;
Stack<TreeNode> q = new Stack<TreeNode>();
q.Push(root);
TreeNode cur,tmp;
while (q.Count>0)
{
cur = q.Pop();
tmp = cur.left;
cur.left = cur.right;
cur.right = tmp;
if (cur.left != null)
q.Push(cur.left);
if (cur.right != null)
q.Push(cur.right);
}
return root;
}