链接:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-postorder-traversal/
分别在前序遍历和后序遍历的数组里找到左右子树的分界点,递归求解即可。
java代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode constructFromPrePost(int[] pre, int[] post) {
return help(pre,0, pre.length-1, post, 0, pre.length-1);
}
private TreeNode help(int [] pre, int prebegin,int preend, int [] post, int postbegin, int postend)
{
if(prebegin>preend)
return null;
TreeNode head = new TreeNode(pre[prebegin]);
if(prebegin == preend)
return head;
int index = postbegin;
while(post[index]!=pre[prebegin+1])
index++;
int lengthOfLeft = index-postbegin;
head.left = help(pre, prebegin+1,prebegin+lengthOfLeft+1,post,postbegin,index);
head.right = help(pre, prebegin+lengthOfLeft+2, preend, post, index+1, postend-1);
return head;
}
}