二叉树算法实战:计算深度与先序遍历还原
一、二叉树深度
题目背景
给定一棵二叉树的节点结构,求其最大深度。这通常是递归思想的入门题。
思路解析
二叉树的高度定义很直观:根节点到最远叶子节点的路径长度。对于任意节点,其高度等于左右子树高度的最大值加一(当前层)。
公式可以表示为:Height(node) = 1 + max(Height(left), Height(right))
边界条件是空节点,高度为 0。这种自底向上的计算非常适合用递归实现。
参考实现
#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];
}
// 假设根节点始终为 1
cout << dfs(1) << endl;
return 0;
}


