前序和中序遍历重建二叉树

来源:互联网 发布:手机验钞软件 编辑:程序博客网 时间:2024/05/22 12:13

代码如下:

原文链接:http://bylijinnan.iteye.com/blog/1355279

最重要的是要找到左子树和右子树的前序,中序遍历在数组中的起始位置,终止位置。

public class BuildTreePreOrderInOrder {/** * Build Binary Tree from PreOrder and InOrder *  _______7______       /              \    __10__          ___2   /      \        /   4       3      _8            \    /             1  11              */public static void main(String[] args) {BuildTreePreOrderInOrder build=new BuildTreePreOrderInOrder();int[] preOrder = {7,10,4,3,1,2,8,11};int[] inOrder =  {4,10,3,1,7,11,8,2};Node root=build.buildTreePreOrderInOrder(preOrder,0,preOrder.length-1,inOrder,0,inOrder.length-1);build.preOrder(root);System.out.println();build.inOrder(root);System.out.println();build.postOrder(root);}public Node buildTreePreOrderInOrder(int[] preOrder,int begin1,int end1,int[] inOrder,int begin2,int end2){if(begin1>end1||begin2>end2){return null;}int rootData=preOrder[begin1];Node head=new Node(rootData);head.left =null;head.right=null;int divider=findIndexInArray(inOrder,rootData,begin2,end2);if(divider==-1){System.out.println("input invalid");}int offSet=divider-begin2-1;head.left =buildTreePreOrderInOrder(preOrder,begin1+1,begin1+1+offSet,inOrder,begin2,begin2+offSet);head.right=buildTreePreOrderInOrder(preOrder,begin1+offSet+2,end1,inOrder,divider+1,end2);return head;}public int findIndexInArray(int[] a,int x,int begin,int end){for(int i=begin;i<=end;i++){if(a[i]==x)return i;}return -1;}public void preOrder(Node n){if(n!=null){System.out.print(n.val+",");preOrder(n.left);preOrder(n.right);}}public void inOrder(Node n){if(n!=null){inOrder(n.left);System.out.print(n.val+",");inOrder(n.right);}}public void postOrder(Node n){if(n!=null){postOrder(n.left);postOrder(n.right);System.out.print(n.val+",");}}class Node{Node left;Node right;int val;public Node(int val){this.val=val;}public Node getLeft(){return left;}public Node getRight(){return right;}public int getVal(){return val;}}}

结果如下:

7,10,4,3,1,2,8,11,
4,10,3,1,7,11,8,2,
4,1,3,10,11,8,2,7,


0 0