leetcode-106 从中序与后序遍历序列构造二叉树
这题和leetcode-105一样,后序最后一个节点是根节点,然后在中序中划分子树即可。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] inorder, int inLeft, int inRight, int[] postorder, int postLeft, int postRight){
if (inLeft > inRight) return null;
TreeNode root = new TreeNode(postorder[postRight]);
int i = 0;
for (i = inLeft; i <= inRight; i++){
if (inorder[i] == postorder[postRight]){
break;
}
}
root.left = buildTree(inorder, inLeft, i - 1, postorder, postLeft, postLeft + (i - inLeft) - 1);
root.right = buildTree(inorder, i + 1, inRight, postorder, postLeft + (i - inLeft), postRight - 1);
return root;
}
public TreeNode buildTree(int[] inorder, int[] postorder) {
TreeNode root = buildTree(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
return root;
}
}