摘要: 1.有点后序遍历的思想,就是先把左子树,右子树的结果算出来,然后合并到根节点。 2.合并时四种情况分类讨论. 3.对于遇到要找的点就可以直接返回,不管另一个点在这个点下面还是在别的子树上,都是正确的 int n, m; int a[N]; int query(int root,int x,int y 阅读全文
posted @ 2023-12-24 19:27 potential-star 阅读(27) 评论(0) 推荐(0)
摘要: 利用前序遍历的特性,如果左子树不空,下一个一定是左节点,不然就是# 因为是转中序遍历,就在两次遍历之间输出 #include <iostream> #include <cstring> #include <algorithm> using namespace std; int k; string s 阅读全文
posted @ 2023-12-24 19:00 potential-star 阅读(26) 评论(0) 推荐(0)
摘要: 一切的核心是怎么利用中序和按层遍历构建二叉树? 1.优化空间很大,可以提前预处理记录每个数对应的位置,还可以vis数组记录这个点是不是已经作为根了。 2.我们考虑到每次找到当前中序要处理区间,里面的数记为集合mid,我们从前到后看层序遍历中的哪个数最先出现在mid中。那么这个数就是当前中序处理区间的 阅读全文
posted @ 2023-12-24 18:24 potential-star 阅读(24) 评论(0) 推荐(0)
摘要: 1.就算不知道用vector的初始化,也可以手动赋值创建子数组。 2.不断找到当前序列对应的根节点,计算他的子节点的总和,在这样递归处理过程中,注意要中序输出,所以对于是先遍历完左子树,然后输出答案,然后遍历右子树 #include <bits/stdc++.h> using namespace s 阅读全文
posted @ 2023-12-24 15:31 potential-star 阅读(12) 评论(0) 推荐(0)
摘要: https://www.acwing.com/problem/content/3601/ 不断找新的先序的根节点,根据位置切割中序,根据中序左右子树大小反切割先序,找到左子树对应的先序中序,然后递归处理 #include<stdio.h> #include<vector> #include<map> 阅读全文
posted @ 2023-12-24 15:18 potential-star 阅读(12) 评论(0) 推荐(0)