From 3bb44ee4de021ea36d023534a361be7435f81362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= Date: Fri, 26 Apr 2019 23:25:02 +0800 Subject: [PATCH] Update 105. Construct Binary Tree from Preorder and Inorder Traversal.md --- ...truct Binary Tree from Preorder and Inorder Traversal.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/solutions/105. Construct Binary Tree from Preorder and Inorder Traversal.md b/solutions/105. Construct Binary Tree from Preorder and Inorder Traversal.md index 789da95..e2c8ee2 100644 --- a/solutions/105. Construct Binary Tree from Preorder and Inorder Traversal.md +++ b/solutions/105. Construct Binary Tree from Preorder and Inorder Traversal.md @@ -2,7 +2,7 @@ # 思路 根据中序和前序遍历建树。 由于先序遍历的第一个肯定是根,所以原二叉树的根节点可以知道,然后由于树中没有相同元素,所以我们可以在中序遍历中也定位出根节点的位置, -并以根节点的位置将中序遍历拆分为左右两个部分,分别对其递归调用原函数。其中在中序遍历中定位根节点可以用个for循环也可以通过map。 +并以根节点的位置将中序遍历拆分为左右两个部分,分别对其递归调用原函数。其中在中序遍历中定位根节点可以用个for循环也可以通过hash(即unordered_map,更快)。 需要提一点的是,同时知道前序遍历(或后序遍历)和中序遍历就能够唯一确定一颗二叉树,而前序和后序则不能。 @@ -12,7 +12,7 @@ class Solution { private: TreeNode* helper(int num, vector& preorder, int pre_start, vector& inorder, int in_start, - map& mp){ + unordered_map& mp){ if(num == 0) return NULL; int val = preorder[pre_start]; TreeNode *node = new TreeNode(val); @@ -24,7 +24,7 @@ private: } public: TreeNode* buildTree(vector& preorder, vector& inorder) { - mapmp; + unordered_mapmp; // 用map记录某个节点在中序遍历数组中的索引 for(int i = 0; i < inorder.size(); i++) mp[inorder[i]] = i; return helper(preorder.size(), preorder, 0, inorder, 0, mp);