[LeetCode]106. 从中序与后序遍历序列构造二叉树(java实现)递归构建二叉树
1. 题目
2. 读题(需要重点注意的东西)
思路(递归构建二叉树):
主要思路与[LeetCode]105. 从前序与中序遍历序列构造二叉树(java实现)递归构建树的过程相同,最主要的不同就是找根节点,前序遍历第一个节点是根节点,而后序遍历最后一个节点是根节点。
3. 解法
---------------------------------------------------解法---------------------------------------------------:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
public TreeNode buildTree(int[] inorder, int[] postorder) {
int n = inorder.length;
for(int i = 0;i < n;i ++) map.put(inorder[i], i);
return build(postorder, inorder, 0, n - 1, 0, n - 1);
}
private TreeNode build(int[] postorder, int[] inorder, int pl, int pr, int il, int ir)
{
if(pl > pr || il > ir) return null;
int t = postorder[pr];
int k = map.get(t);
TreeNode root = new TreeNode(t);
root.left = build(postorder, inorder, pl, pl + k - 1 - il, il, k - 1);
root.right = build(postorder, inorder, pl + k - 1 - il + 1, pr - 1, k + 1, ir);
return root;
}
}
可能存在的问题:
4. 可能有帮助的前置习题
5. 所用到的数据结构与算法思想
6. 总结
通过中序遍历和后序遍历递归构建二叉树