题目
输入一个二叉查找树,将该树转换成它的镜像,即转换后的二叉查找树中,左子树的节点都大于右子树的节点;
实现
方法1
思路:递归。对于当前节点,交换左右孩子,然后递归求解左右子树即可;
代码:
public static void Mirror_1(BSTreeNode_2 root){
if(root==null){
return ;
}
BSTreeNode_2 node=root.left;
root.left=root.right;
root.right=node;
Mirror_1(root.left);
Mirror_1(root.right);
}
方法2
思路:循环;需要一个辅助栈,每次取出栈顶元素,交换该元素的左右孩子,然后将其左右孩子压入栈,当栈为空结束;
代码:
public static void Mirror_2(BSTreeNode_2 root){
Stack stack=new Stack();
if(root!=null){
stack.push(root);
}
while(!stack.isEmpty()){
BSTreeNode_2 node=(BSTreeNode_2) stack.peek();
stack.pop();
//change the left and right child
BSTreeNode_2 tmp=node.left;
node.left=node.right;
node.right=tmp;
//push the left and right child to stack
if(node.left!=null){
stack.push(node.left);
}
if(node.right!=null){
stack.push(node.right);
}
}
}