Java二叉樹(二)--根據前序和中序遍歷求後序遍歷

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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章