LeetCode题解105. 从前序与中序遍历序列构造二叉树

今日的每日一题来一个leetcode题目, 《105. 从前序与中序遍历序列构造二叉树》

题目描述:

```

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:

你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]

中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

3

/ \\

9 20

/ \\

15 7

```

题目链接: https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/

题解:思路:

利用中序把数组划分成左右两个,定出左右子树在中序中的左右界(这里用到哈希表)。前序就好办,挨个遍历就好。有个tricky的地方,就是要保存前序目前处理到哪里了

代码:

```C++
class Solution {
private:
int pos = 0;
private:
TreeNode* genTree(vector& pre, unordered_map& m, int s, int e) {
if (pos >= pre.size() || s > e) return nullptr;
auto root = new TreeNode(pre[pos++]);
if (s == e) return root;
int loc = m.find(root->val)->second;
root->left = genTree(pre, m, s, loc - 1);
root->right = genTree(pre, m, loc + 1, e);
return root;
}
public:
TreeNode* buildTree(vector& preorder, vector& inorder) {
auto m = unordered_map();
for (auto i = 0; i < inorder.size(); ++i) {
m.insert(make_pair(inorder[i], i));
}
return genTree(preorder, m, 0, inorder.size() - 1);
}
};
```

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解深度优先遍历和回溯的关系?

深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。

LeetCode题解盲人买袜子。

他们都各自买了两对黑袜和两对白袜,八对袜子的布质、大小完全相同,而每对袜子都有一张商标纸连着。两位盲人不小心将八对袜子混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?题解:暴力破解, 把袜子都拆开 一人一只 哈哈

LeetCode题解分鸡块

外卖鸡块分别有 4,6,12 块, 每 固定块数不能分开装, 用户给一个数字, 要求返回满足用户订单(可以等于也可以大于)的最少的盒数的组合

LeetCode题解10个小球,随机分到12个盒子里,求恰好10个盒子都为空的概率。

10个小球,随机分到12个盒子里,求恰好10个盒子都为空的概率。要求用程序模拟十万次,暴力求出该概率来自:字节跳动 算法工程师一面的第一题 (3月30日,60分钟,牛客网视频面)https://www.nowcoder.com/discuss/395924