题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。
分析:递归方法只需要遍历二叉树对遇到的节点交换左右即可,非递归可用栈遍历
//递归程序
void reverseTree(TreeNode *root)
{
if(root==null) return;
TreeNode * temp; //交换左右子树指针
temp=root->left;
root->left=root->right;
root->right=temp;
reverseTree(root->left);
reverseTree(root->right);
}
//非递归程序
void reverseTreeN(treeNode *root)
{
if(root==null) return;
stack s<treeNode *>=new <treeNode *>();
treeNode *temp;
s.push(root);
while( !s.isEmpty())
{
root=s.pop();
temp=root->left;
root->left=root->right;
root->right=temp;
root=root>left;
if(root->left!=null) s.push(
root->left
);
if(root->right!=null) s.push(
root->right
);
}
}