您的位置:首页 > 其它

中序和后序构建二叉树

2016-02-23 17:01 197 查看

题目描述

Given inorder and postorder traversal of a tree, construct the binary tree.

题目解答

解题思路

在inorder找到root,然后划分左右

递归构建

代码实现

public class ConstructTreeFromInAndPost {

public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder == null || postorder == null || inorder.length != postorder.length || inorder.length == 0)
return null;
return buildTreeCore(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);
}

public TreeNode buildTreeCore(int[] inorder, int s1, int e1, int[] postorder, int s2, int e2) {

if(s1 > e1 || s2 > e2)
return null;
TreeNode root = new TreeNode(postorder[e2]);

int rootIndex = -1;
for(int i = s1; i <= e1; i++){
if(inorder[i] == root.val){
rootIndex = i;
break;
}
}
if(rootIndex == -1)
return null;
int leftSize = rootIndex - s1;
int rightSize = e1 - rootIndex;
root.left = buildTreeCore(inorder, s1, rootIndex-1, postorder, s2, s2+leftSize-1);
root.right = buildTreeCore(inorder, rootIndex+1, e1, postorder, e2-rightSize, e2-1);
return root;
}

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: