二叉树深度计算
题目描述
给定一棵二叉树的节点数 n,以及每个节点的左右子节点编号(若为 0 表示无子节点)。根节点固定为 1。要求计算该二叉树的最大深度。
解题思路
二叉树的深度定义为从根节点到最远叶子节点的最长路径上的节点数。对于任意节点,其深度等于左右子树深度的较大值加 1。这是一个典型的递归场景,无需构建复杂的树结构,直接用数组存储父子关系即可高效求解。
代码实现
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6 + 10;
int l[N], r[N]; // 存储左右子节点
// 递归计算以 root 为根的子树深度
int dfs(int root) {
if (!root) return 0; // 空节点深度为 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;
}
由中序与后序序列求先序排列
题目描述
已知一棵二叉树的中序遍历序列和后序遍历序列,求其先序遍历序列。
解题思路
后序遍历的最后一个元素是当前子树的根节点。在中序遍历中找到该根节点,即可将序列划分为左子树和右子树部分。利用这一性质递归处理左右区间,即可按'根 - 左 - 右'的顺序输出先序序列。


