前言
本文聚焦于二叉树基础算法的实战应用,通过两道典型例题梳理递归思想在树结构中的具体运用。
题目一:二叉树深度
题目描述
参考洛谷题目 P4913。
解题思路
二叉树的高度定义为 1 加上左右子树高度的最大值。这是一个典型的递归场景:对于任意节点,其深度取决于子节点的深度。只要处理好空节点返回 0 的基准情况,就能自底向上计算出整棵树的深度。
代码实现
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int l[N], r[N];
// 递归计算以 root 为根的子树深度
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;
}
题目二:求先序排列
题目描述
参考洛谷题目 P1030。
解题思路
这道题的核心在于利用后序遍历和中序遍历还原先序遍历。后序遍历的最后一个元素一定是当前子树的根节点。找到这个根节点在中序遍历中的位置,就可以将中序序列划分为左子树和右子树两部分。随后对左右子树分别递归执行相同操作,即可按先序顺序输出节点。


