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;
}
}
Java二叉树(二)--根据前序和中序遍历求后序遍历
最新推荐文章于 2022-07-02 14:51:28 发布