返回与给定的前序和后序遍历匹配的任何二叉树。
pre
和 post
遍历中的值是不同的正整数。
示例:
输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1] 输出:[1,2,3,4,5,6,7]
提示:
1 <= pre.length == post.length <= 30
pre[]
和post[]
都是1, 2, ..., pre.length
的排列- 每个输入保证至少有一个答案。如果有多个答案,可以返回其中一个。
/**
* 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) {
TreeNode root=new TreeNode(pre[0]);
Stack<TreeNode> s=new Stack();
s.push(root);
int index=0;
for(int i=1;i<pre.length;i++){
TreeNode cur=new TreeNode(pre[i]);
if(s.peek().left==null){
s.peek().left=cur;
}else{
s.peek().right=cur;
}
s.push(cur);
while(!s.isEmpty()&&index!=post.length&&post[index]==s.peek().val){
index++;
s.pop();
}
}
return root;
}
}