LeetCode-106.從中序與後序遍歷序列構造二叉樹(相關話題:深度優先搜尋)
阿新 • • 發佈:2018-12-14
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
注意: 你可以假設樹中沒有重複的元素。
例如,給出
中序遍歷 inorder = [9,3,15,20,7]
後序遍歷 postorder = [9,15,7,20,3]
返回如下的二叉樹:
3
/ \
9 20
/ \
15 7
Java程式碼:
class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { return dfs(inorder, 0, inorder.length, postorder, postorder.length-1); } private TreeNode dfs(int[] inorder, int is, int ie, int[] postorder, int pe){ if(is == ie) return null; if(1 == ie-is) return new TreeNode(inorder[is]); TreeNode root = new TreeNode(postorder[pe]); int index = is; for(; index < ie && inorder[index] != postorder[pe]; index++); root.left = dfs(inorder, is, index, postorder, pe-(ie-index)); root.right = dfs(inorder, index+1, ie, postorder, pe-1); return root; } }