java-从先序遍历和中序遍历重建二叉树

来源:互联网 发布:软件注册过期怎么办 编辑:程序博客网 时间:2024/05/17 01:43
  1. public class BuildTreePreOrderInOrder {  
  2.   
  3.     /** 
  4.      * Build Binary Tree from PreOrder and InOrder 
  5.      *  _______7______ 
  6.        /              \ 
  7.     __10__          ___2 
  8.    /      \        / 
  9.    4       3      _8 
  10.             \    / 
  11.              1  11 
  12.               
  13.      */  
  14.     public static void main(String[] args) {  
  15.         BuildTreePreOrderInOrder build=new BuildTreePreOrderInOrder();  
  16.         int[] preOrder = {7,10,4,3,1,2,8,11};  
  17.         int[] inOrder = {4,10,3,1,7,11,8,2};  
  18.   
  19.         Node root=build.buildTreePreOrderInOrder(preOrder,0,preOrder.length-1,inOrder,0,preOrder.length-1);  
  20.         build.preOrder(root);  
  21.         System.out.println();  
  22.         build.inOrder(root);  
  23.     }  
  24.   
  25.     public Node buildTreePreOrderInOrder(int[] preOrder,int begin1,int end1,int[] inOrder,int begin2,int end2){  
  26.         if(begin1>end1||begin2>end2){  
  27.             return null;  
  28.         }  
  29.         int rootData=preOrder[begin1];  
  30.         Node head=new Node(rootData);  
  31.         int divider=findIndexInArray(inOrder,rootData,begin2,end2);  
  32.         int offSet=divider-begin2-1;  
  33.         Node left=buildTreePreOrderInOrder(preOrder,begin1+1,begin1+1+offSet,inOrder,begin2,begin2+offSet);  
  34.         Node right=buildTreePreOrderInOrder(preOrder,begin1+offSet+2,end1,inOrder,divider+1,end2);  
  35.         head.left=left;  
  36.         head.right=right;  
  37.         return head;  
  38.     }  
  39.       
  40.     public int findIndexInArray(int[] a,int x,int begin,int end){  
  41.         for(int i=begin;i<=end;i++){  
  42.             if(a[i]==x)return i;  
  43.         }  
  44.         return -1;  
  45.     }  
  46.     public void preOrder(Node n){  
  47.         if(n!=null){  
  48.             System.out.print(n.val+",");  
  49.             preOrder(n.left);  
  50.             preOrder(n.right);  
  51.         }  
  52.     }  
  53.     public void inOrder(Node n){  
  54.         if(n!=null){  
  55.             inOrder(n.left);  
  56.             System.out.print(n.val+",");  
  57.             inOrder(n.right);  
  58.         }  
  59.     }  
  60.       
  61.     class Node{  
  62.         Node left;  
  63.         Node right;  
  64.         int val;  
  65.   
  66.     public Node(int val){  
  67.         this.val=val;  
  68.     }  
  69.         public Node getLeft(){  
  70.             return left;  
  71.         }  
  72.   
  73.     public Node getRight(){  
  74.             return right;  
  75.         }  
  76.   
  77.     public int getVal(){  
  78.             return val;  
  79.         }  
  80.   
  81.   
  82.     }  
  83. }  
网址:http://bylijinnan.iteye.com/blog/1355279
还有一篇博客:http://blog.csdn.net/sgbfblog/article/details/7783935
0 0
原创粉丝点击