如何將word公式複製到富文字編輯器裡面
阿新 • • 發佈:2021-07-21
106. 從中序與後序遍歷序列構造二叉樹
知識點:二叉樹,遞迴
題目描述
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
注意:
你可以假設樹中沒有重複的元素。
示例
中序遍歷 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() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { if(postorder == null) return null; Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < inorder.length; i++){ map.put(inorder[i], i); } return buildTree(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1, map); } private TreeNode buildTree(int[] inorder, int[] postorder, int inleft, int inright, int postleft, int postright, Map<Integer,Integer> map){ if(postleft > postright) return null; TreeNode root = new TreeNode(postorder[postright]); int rootIndex = map.get(root.val); int leftTreeSize = rootIndex-inleft; root.left = buildTree(inorder, postorder, inleft, rootIndex-1, postleft, postleft+leftTreeSize-1,map); root.right = buildTree(inorder, postorder, rootIndex+1, inright, postleft+leftTreeSize, postright-1,map); return root; } }