Java二叉树(二)--根据前序和中序遍历求后序遍历

来源:互联网 发布:mac 找不到原始项目 编辑:程序博客网 时间:2024/06/05 04:41
package binarytree;/** * @author Gavenyeah * @date Time: 2016年4月12日上午10:51:37 * @des:  *///根据前序和中序遍历求后序遍历public class PostFromPre_In {    BinaryTree biTree=new BinaryTree();//定义见java二叉树(一)    public static void main(String[] args) {        PostFromPre_In pfpi=new PostFromPre_In();        int[]preOrder=new int[]{3,1,2,8,6,5,7,10,9,11};        int[]inOrder=new int[]{1,2,3,5,6,7,8,9,10,11};        pfpi.initTree(preOrder,inOrder);        pfpi.biTree.postOrder(pfpi.biTree.root);    }    public void initTree(int[]preOrder,int[]inOrder){        biTree.root=this.initTree(preOrder,0,preOrder.length-1,inOrder,0,inOrder.length-1);    }    //根据前序子序列和中序子序列来递归求左子树和右子树的根节点    public Node initTree(int[]preOrder,int start1,int end1,int[]inOrder,int start2,int end2){        if(start1>end1||start2>end2){            return null;        }        //前序的第一个节点为当前子树的根节点        int rootData=preOrder[start1];        Node head=new Node(rootData);        int rootIndex=findIndexInOrder(rootData,inOrder,start2,end2);        int sublen=rootIndex-start2;        if(sublen<0){            return null;        }        head.left=initTree(preOrder,start1+1,start1+sublen,inOrder,start2,rootIndex-1);        head.right=initTree(preOrder,start1+sublen+1,end1,inOrder,rootIndex+1,end2);        return head;    }    public int findIndexInOrder(int val,int []inOrder,int start,int end){        int index=-1;        for(int i=start;i<=end;i++){            if(val==inOrder[i]){                index=i;            }        }        return index;    }}
0 0
原创粉丝点击