输入一个二叉树,输出其镜像。
实现:
import java.util.Stack;
/**
* 反转二叉树
*/
public class ReverseBinaryTree {
/**
* 使用递归方法实现
* @param root 二叉树的根节点
* @return
*/
public static TreeNode getReverseTreeByDiGui(TreeNode root){
if(root == null){
return root;
}
//将左右节点互换位置
TreeNode n = root.getLeft();
root.setLeft(root.getRight());
root.setRight(n);
//对该节点的左节点进行递归反转操作
getReverseTreeByDiGui(root.getLeft());
//对该节点的右节点进行递归反转操作
getReverseTreeByDiGui(root.getRight());
return root;
}
/**
* 使用Stack实现
* @param root 二叉树的根节点
* @return
*/
public static TreeNode getReverseTreeByStack(TreeNode root){
if(root == null){
return root;
}
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.add(root);
while(!stack.isEmpty()){
//获取栈顶的元素
TreeNode n = stack.pop();
if(n.getLeft()!=null){
//将该node的左节点放入栈中,后面的循环中将这个左节点的左右节点互换
stack.push(n.getLeft());
}
if(n.getRight()!=null){
//将该node的右节点放入栈中,后面的循环中将这个右节点的左右节点互换
stack.push(n.getRight());
}
//当前这个节点的左右节点互换
TreeNode temp = n.getLeft();
n.setLeft(n.getRight());
n.setRight(temp);
}
return root;
}
}