输入一颗二元查找树,将该树转换为它的镜像

题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。   
例如输入:
  8
  / /
  6 10
 // //
5 7 9 11

输出:
  8
  / /
 10 6
 // //
11 9 7 5

定义二元查找树的结点为:
struct BSTreeNode // a node in the binary search tree (BST)
{
  int m_nValue; // value of node
  BSTreeNode *m_pLeft; // left child of node
  BSTreeNode *m_pRight; // right child of node

};


   public static void mirrorHelp1(Node node){   
        if(node==null)return;   
        swapChild(node);   
        mirrorHelp1(node.getLeft());   
        mirrorHelp1(node.getRight());   
    }   
    //use no recursion but stack   
    public static void mirrorHelp2(Node node){   
        if(node==null)return;   
        Stack<Node> stack=new Stack<Node>();   
        stack.add(node);   
        while(!stack.isEmpty()){   
            node=stack.pop();   
            swapChild(node);   
            if(node.getLeft()!=null){   
                stack.push(node.getLeft());   
            }   
            if(node.getRight()!=null){   
                stack.push(node.getRight());   
            }   
                   
        }   
    }   
  
    public static void swapChild(Node node){   
        /*not like c/c++,you cannot do this:  
        Node temp=left;  
        left=right;  
        right=temp;  
        */  
        Node left=node.getLeft();   
        node.setLeft(node.getRight());   
        node.setRight(left);   
    }  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值