Construct Binary Tree from Inorder and Postorder Traversal
Thoughts
Code
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private TreeNode helper(int[] inorder, int instart, int inend, int[] postorder, int pstart, int pend) {
if (instart > inend || pstart > pend) {
return null;
}
int nodeVal = postorder[pend];
int inpos = -1;
// 0, 6 - 0
for (int i = 0; i <= inend - instart; i++) {
if (inorder[instart + i] == nodeVal) {
inpos = i;
}
}
TreeNode node = new TreeNode(inorder[instart + inpos]);
node.left = helper(inorder, instart, instart + inpos - 1, postorder, pstart, pstart + inpos - 1);
node.right = helper(inorder, instart + inpos + 1, inend, postorder, pstart + inpos, pend - 1);
return node;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
return helper(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
}
}Analysis
Ver.2
Last updated