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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值