- 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,preOrder.length-1);
- build.preOrder(root);
- System.out.println();
- build.inOrder(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);
- int divider=findIndexInArray(inOrder,rootData,begin2,end2);
- int offSet=divider-begin2-1;
- Node left=buildTreePreOrderInOrder(preOrder,begin1+1,begin1+1+offSet,inOrder,begin2,begin2+offSet);
- Node right=buildTreePreOrderInOrder(preOrder,begin1+offSet+2,end1,inOrder,divider+1,end2);
- head.left=left;
- head.right=right;
- 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);
- }
- }
- 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;
- }
- }
- }
面试题6 先序和中序建二叉树
最新推荐文章于 2022-11-29 16:15:31 发布