二叉树深度计算
题目
链接:二叉树深度
![二叉树结构示意图]
算法原理
二叉树的高度取决于其左右子树的最大深度。公式为:当前高度 = 1 + max(左子树高度,右子树高度)。这是一个典型的递归场景。
代码实现
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int l[N], r[N];
int dfs(int root) {
if (!root) return 0;
return max(dfs(l[root]), dfs(r[root])) + 1;
}
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> l[i] >> r[i];
cout << dfs(1) << endl;
return 0;
}
求先序排列
题目
链接:求先序排列
![先序遍历示意图]
算法原理
这道题的核心在于利用后序遍历的'根在后'特性定位根节点,再结合中序遍历的'根在中间'特性划分左右子树范围。处理左右子树的方式与原始序列一致,因此可以用递归完成。
关键在于如何确定递归区间的边界。后序序列的最后一个元素是当前子树的根,在中序序列中找到该根的位置,即可将中序序列分为左子树部分和右子树部分。
代码实现
std;
string a, b;
{
(r1 < l1) ;
cout << b[r2];
p = l1;
(a[p] != b[r2]) p++;
(l1, p - , l2, l2 + p - l1 - );
(p + , r1, l2 + p - l1, r2 - );
}
{
cin >> a >> b;
(, a.() - , , b.() - );
;
}


