翻转一颗二叉树
1 1
/ \ / \
2 3 => 3 2
/ \
4 4
思路(非递归):在讨论区看到的。这里很巧妙利用了一个栈来处理,利用深度遍历优先的思想来处理。
/*
* 翻转二叉树
*/
public class InvertBinaryTree {
public void invertBinaryTree(TreeNode root) {
// write your code here
if(root==null)
return;
Stack<TreeNode> elseNode = new Stack<TreeNode>();
TreeNode curNode = root;
while(!elseNode.empty() || curNode!=null)
{
while(curNode!=null)
{
elseNode.push(curNode);
TreeNode tempNode = curNode.left;
curNode.left = curNode.right;
curNode.right = tempNode;
curNode = curNode.left;
}
curNode = elseNode.pop().right;
}
}
}
递归:
public void invertBinaryTree(TreeNode root) {
// write your code here
invertTree(root);
}
public TreeNode invertTree(TreeNode root){
if( root ==null){
return root;
}
TreeNode rleft= root.left;
root.left = invertTree(root.right);
root.right = invertTree(rleft);
return root;
}