LeetCode-Construct Binary Tree From Inorder And Postorder Traversal
阿新 • • 發佈:2018-11-01
一、Description
Given inorder and postorder traversal of a tree, construct the binary tree.
題目大意:給定一個二叉樹的中序與後序遍歷序列,構建這棵樹並返回根結點。
For example, given
inorder = [9,3,15,20,7] postorder = [9,15,7,20,3]
Return the following binary tree:
3 / \ 9 20 / \ 15 7
二、Analyzation
這個題與上一篇中的題目做個對比,程式碼框架大致相同,基本思路可參考: Construct Binary Tree From Preorder And Postorder Traversal
三、Accepted code
class Solution { Map<Integer, Integer> map = new HashMap<>(); public TreeNode buildTree(int[] inorder, int[] postorder) { for (int i = 0; i < inorder.length; i++) { map.put(inorder[i], i); } return help(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1); } public TreeNode help(int[] inorder, int[] postorder, int a, int b, int c,int d) { if (a > b || c > d) { return null; } TreeNode root = new TreeNode(postorder[d]); if (a == b || c == d) { return root; } int index = map.get(postorder[d]); int len = index - a; root.left = help(inorder, postorder, a, index - 1, c, c + len - 1); root.right = help(inorder, postorder, index + 1, b, c + len, d - 1); return root; } }