您的位置:首页 > 编程语言 > Java开发

leetcode-java-106. Construct Binary Tree from Inorder and Postorder Traversal

2016-08-15 15:55 501 查看
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
/*
1.根据postorder确定根节点
2.在inorder中找到此根节点,找到左子树和右子树递归
*/
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
return buildTree(inorder,0,inorder.length - 1,postorder,0,postorder.length - 1);
}
public TreeNode buildTree(int[] inorder,int inBegin,int inEnd,int[] postorder,int postBegin,int postEnd) {
if(inBegin > inEnd) {
return null;
}
// 找到根节点
int val = postorder[postEnd];
TreeNode root = new TreeNode(val);

// 在inorder中找到此根节点
int leftLen = 0,
i = inBegin;
for(;i < inEnd;i++) {
if(val == inorder[i]) {
break;
}
leftLen++;
}
// 需要注意加1
root.left = buildTree(inorder,inBegin,inBegin + leftLen - 1,postorder,postBegin,postBegin + leftLen - 1);
root.right = buildTree(inorder,inBegin + leftLen + 1,inEnd,postorder,postBegin + leftLen,postEnd - 1);
return root;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐