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

来源:互联网 发布:linux 不支持ext4 编辑:程序博客网 时间:2024/04/30 15:19
package test;/***题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:    8   / \ 6    10/ \   / \   <span style="white-space:pre"></span>5  7 9  11输出:   <span style="white-space:pre"></span>     8   /   \10     6/ \    / \  <span style="white-space:pre"></span>11 9  7   5思路:前序遍历二元查找树,有子树,则交换指针指向。*/public class MS_15 {/** * 翻转树 * @param root */private void reverseTree(BSTreeNode root) {System.out.println();printTree(node1);if(root != null) {BSTreeNode t = root.m_pLeft;root.m_pLeft = root.m_pRight;root.m_pRight = t;if(root.m_pLeft!=null) {reverseTree(root.m_pLeft);} if(root.m_pRight!=null) {reverseTree(root.m_pRight);}}}//初始化二叉树static MS_15 ms15 = new MS_15();static BSTreeNode node1 = ms15.new BSTreeNode();static BSTreeNode node2 = ms15.new BSTreeNode();static BSTreeNode node3 = ms15.new BSTreeNode();static BSTreeNode node4 = ms15.new BSTreeNode();static BSTreeNode node5 = ms15.new BSTreeNode();static BSTreeNode node6 = ms15.new BSTreeNode();static BSTreeNode node7 = ms15.new BSTreeNode();//赋值static{node1.m_nValue=8;node1.m_pLeft=node2;node1.m_pRight=node3;node2.m_nValue = 6;node2.m_pLeft=node4;node2.m_pRight=node5;node3.m_nValue = 10;node3.m_pLeft = node6;node3.m_pRight = node7;node4.m_nValue = 5;node4.m_pLeft = null;node4.m_pRight = null;node5.m_nValue = 7;node5.m_pLeft = null;node5.m_pRight = null;node6.m_nValue = 9;node6.m_pLeft = null;node6.m_pRight = null;node7.m_nValue = 11;node7.m_pLeft = null;node7.m_pRight = null;}/** * 打印树 * @param root */private static void printTree(BSTreeNode root) {if(root!=null) {System.out.print(root.m_nValue+",");if(root.m_pLeft!=null) {printTree(root.m_pLeft);}if(root.m_pRight!=null) {printTree(root.m_pRight);}}}public static void main(String[] args) {MS_15 ms15 = new MS_15();ms15.reverseTree(node1);System.out.println();printTree(node1);}class BSTreeNode {BSTreeNode m_pLeft;BSTreeNode m_pRight;int m_nValue;}}

0 0
原创粉丝点击