leetcode 算法-从中序与后序遍历序列构造二叉树
题目
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]
返回如下的二叉树:
3
/
9 20
/
15 7
解题思路
本题解法类似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[] postorder) {
return build(inorder, postorder, 0, postorder.length, postorder.length);
}
public static TreeNode build(int[] inorder, int[] postorder, int inStart, int postEnd, int length) {
if (length == 0) return null;
int root = postorder[postEnd-1];
TreeNode treeNode = new TreeNode(root);
if (length == 1) return treeNode;
for (int i = length-1; i >=0; i--) {
if (root == inorder[inStart + i]) {
treeNode.left=build(inorder, postorder,inStart,postEnd-length+i,i);
treeNode.right=build(inorder, postorder,inStart+i+1,postEnd-1,length-1-i);
return treeNode;
}
}
return null;
}
}