/*
* 根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
*
*/
import java.util.Arrays;
public class TreeNode{
int data;
public TreeNode (int data) {
this.data=data;
}
public static void buildTree(int[] inorder,int[] postorder){
if(inorder.length==0 || postorder.length==0)
{
return ;
}
//根据后序遍历可找出根节点
int data=postorder[postorder.length-1];
TreeNode root = new TreeNode(data);
System.out.println("先序遍历依次打印结点:"+root.data);
//找出根在数组中的索引
int rootIndex = 0;
int i=0;
while(i<inorder.length)
{
if(inorder[i]==root.data)
{
rootIndex=i;
break;
}
else {
i++;
}
}
//划分左子树的中序和后序
int[] leftinorder= Arrays.copyOfRange(inorder, 0, rootIndex);
int[] leftpostorder= Arrays.copyOfRange(postorder, 0, rootIndex);
buildTree(leftinorder,leftpostorder);
//划分右子树的中序和后序
int[] rightinorder= Arrays.copyOfRange(inorder,rootIndex+1,inorder.length);
int[] rightpostorder=Arrays.copyOfRange(postorder,rootIndex,postorder.length-1);
buildTree(rightinorder,rightpostorder);
}
public static void main(String[] args) {
int[] inorder={9,3,15,20,7};
int[] postorder={9,15,7,20,3};
buildTree(inorder,postorder);
}
}
根据一棵树的中序遍历与后序遍历构造二叉树。
最新推荐文章于 2021-09-05 19:26:22 发布