您的位置:首页 > 其它

LeetCode Construct Binary Tree from Inorder and Postorder Traversal

2015-07-06 16:00 495 查看
Description:

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

Solution:

和前一道题目类似,不过这里的len表示的是当前根节点的右子树。

中序:(左子树)(根节点)(len长度的右子树)

后序:(左子树)(len长度的右子树)(根节点)

import java.util.*;

public class Solution {
int[] inorder;
int[] postorder;
int n;

public TreeNode buildTree(int[] inorder, int[] postorder) {
this.inorder = inorder;
this.postorder = postorder;
int n = inorder.length;

return dfs(0, n - 1, 0, n - 1);
}

TreeNode dfs(int inStart, int inEnd, int postStart, int postEnd) {
if (inStart > inEnd)
return null;
int inMiddle = inStart;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == postorder[postEnd]) {
inMiddle = i;
break;
}
}
int len = inEnd - inMiddle;

TreeNode root = new TreeNode(postorder[postEnd]);
root.left = dfs(inStart, inMiddle - 1, postStart, postEnd - 1 - len);
root.right = dfs(inMiddle + 1, inEnd, postEnd - len, postEnd - 1);

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