从中序与后序遍历序列构造二叉树
1、根据一棵树的中序遍历与后序遍历构造二叉树。
2、假设树中没有重复的元素。
/**
* 通过后序遍历和中序遍历构建一颗二叉树:递归实现
* @param inorder
* @param postorder
* @return
*/
public TreeNode buildTree(int[] inorder, int[] postorder) {
//递归终止条件
if(inorder.length == 0 || postorder.length ==0){
return null;
}
//递归内容
//根据后续遍历的最后一个元素确定根节点
TreeNode root = new TreeNode(postorder[postorder.length-1]);
int index = -1;
//从中序遍历中查找值等于根节点值得索引下表index
for(int i= 0 ;i<inorder.length;i++){
if(inorder[i] == root.val){
index = i;
break;
}
}
//确定index后,将中序数组分为:[0-index)为左子树,[index+1-endindex]为右子树两部分
//后序数组分为[0-index)为左子树,[index-endindex-1]为右子树两部分
int[] inLeft = Arrays.copyOfRange(inorder,0,index);
int[] inRight = Arrays.copyOfRange(inorder,index+1,inorder.length