LeetCode-105.從前序與中序遍歷序列構造二叉樹(相關話題:深度優先搜尋)
阿新 • • 發佈:2018-12-14
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。
注意: 你可以假設樹中沒有重複的元素。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3
/ \
9 20
/ \
15 7
解題思路:
在前序遍歷序列中找到根節點(第一個元素),找到根節點在中序遍歷序列中的位置,將其左側的元素構造為左子樹,右側的元素構造為右子樹,構造左右子樹的過程與上述過程相同
Java程式碼:
class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { return dfs(preorder, 0, inorder, 0, inorder.length); } private TreeNode dfs(int[] preorder, int ps, int[] inorder, int is, int ie){ if(is == ie) return null; if(1 == ie-is){ return new TreeNode(inorder[is]); } TreeNode root = new TreeNode(preorder[ps]); int index = is; for(; index < ie && inorder[index] != preorder[ps]; index++); root.left = dfs(preorder, ps+1, inorder, is, index); root.right = dfs(preorder, ps+1+(index-is), inorder, index+1, ie); return root; } }