微软100题15题(输入一颗二元查找树,将该树转换为它的镜像)

来源:互联网 发布:办公软件基础教程 编辑:程序博客网 时间:2024/05/18 02:43

1scala版本

package ms/** * 第15题(树):题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。  例如输入:  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}; */class BinarySearchReverseTree(){  var root:Node=null;  def this(data:List[Int]){    this()    if(data.length>0){      this.root=new Node(data(0))      for(i<-1 until data.length){        insertNode(this.root,data(i))      }    }  }    private[this] def insertNode(parent:Node,value:Int){    if(parent.value>value){      if(parent.left==null){        parent.left=new Node(value)      }else{        insertNode(parent.left,value)      }    }else{      if(parent.right==null){        parent.right=new Node(value)      }else{        insertNode(parent.right,value)      }    }  }    def switch(parent:Node){    if(parent==null)return;    val left=parent.left    val right=parent.right    parent.left=right    parent.right=left    switch(parent.left)    switch(parent.right)  }    def printPreOrder(parent:Node){    if(parent==null)return    else      printPreOrder(parent.left)      print(parent.value+",")      printPreOrder(parent.right)  }    case class Node(var value:Int,var left:Node=null,var right:Node=null)}object MicroSoft015 {  def main(args: Array[String]): Unit = {    val data=List(5,7,2,3,8,1,6,9)    val tree=new BinarySearchReverseTree(data)    tree.printPreOrder(tree.root)    tree.switch(tree.root)    println()    tree.printPreOrder(tree.root)  }}

2java版本

http://blog.csdn.net/hxpjava1/article/details/22437005


3python版本

'''Created on 2017-1-18@author: admin第15题(树): 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。   例如输入:   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 }; '''from _overlapped import NULLclass BinarySearchReverseTree:    def __init__(self,data):        if len(data)>0:            self.root=self.Node(data[0])            for i in range(1,len(data)):                self._insertNode(self.root,data[i])    def _insertNode(self,parent,value):        if parent.value>value:            if parent.left==NULL:                parent.left=self.Node(value)            else:                self._insertNode(parent.left, value)        else:            if parent.right==NULL:                parent.right=self.Node(value)            else:                self._insertNode(parent.right, value)        def switch(self,parent):        if parent==NULL:            return;        left=parent.left        right=parent.right        parent.left=right        parent.right=left        self.switch(parent.left)        self.switch(parent.right)             def printTree(self,parent):        if parent==NULL:            return        self.printTree(parent.left)        print(parent.value,end=",")        self.printTree(parent.right)           class Node:        def __init__(self,value):            self.value=value            self.left=NULL            self.right=NULL    if __name__ == '__main__':    data=[5,7,2,3,8,1,6,9]    tree=BinarySearchReverseTree(data)    tree.printTree(tree.root)    print()    tree.switch(tree.root)    tree.printTree(tree.root)


0 0