二叉树核心算法实战:深度计算与先序遍历还原
本文聚焦二叉树递归逻辑,通过两个经典例题解析深度计算与序列还原的核心思路。
一、二叉树深度
1. 题目描述
给定一棵二叉树,求其最大深度。输入包含节点数及左右子节点关系,根节点固定为 1。
2. 算法原理
二叉树的深度定义为从根节点到最远叶子节点的最长路径上的节点数。递归公式非常直观:
当前深度 = 1 + max(左子树深度,右子树深度)
若当前节点为空,深度为 0。利用数组存储左右子节点索引,可直接通过 DFS 遍历求解。
3. 代码实现
#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
// 取左右子树深度的最大值,加 1 即为当前层
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; // 从根节点 1 开始计算
return ;
}


