题目
输入一棵二叉搜索树,将该树转换为它的镜像,即再转换后的二叉搜索树中,左子树的节点都大于右子树的节点。用递归和非递归两种方法实现。
解法
1. 关于树的问题较多的采用递归的思想,这里的递归思想为:从根结点开始,交换它的左右子树,然后依次交换左孩子的左右子树和右孩子的左右子树。递归完成即可。
2. 非递归的版本,迭代版本需要一个辅助stack的使用。每次去栈顶元素,交换它的左右孩子,然后左右孩子分别入stack,当stack为空时结束迭代。
递归方法:
MIRROR-BST(BSTreeNode root):
if root == null:
return null;
exchange root.left with root.right;
MIRROR-BST(root.left);
MIRROR-BST(root.right);
return root;
迭代方法:
MIRROR-BST-INTERVAL(BSTreeNode root):
if root == null:
return null;
new stack buffer is empty;
buffer.push(root);
while buffer != empty:
BSTreeNode node = buffer.pop();
exchange node.left with node.right;
if node.left != null:
buffer.push(node.left);
if node.right != null:
buffer.push(node.right);
return root;