总结8..
#include <stdio.h>
// 定义结构体表示二叉树节点,包含左右子节点编号
struct node {
int l;
int r;
} tree[100000];
// 全局变量记录二叉树最大深度,初始为0
int ans = 0;
// 深度优先搜索函数
// pos: 当前节点在数组中的位置,deep: 当前深度
void dfs(int pos, int deep) {
// 若为叶子节点
if (tree[pos].l == 0 && tree[pos].r == 0) {
if (deep > ans) ans = deep; // 更新最大深度
return;
}
dfs(tree[pos].l, deep + 1); // 递归搜索左子树
dfs(tree[pos].r, deep + 1); // 递归搜索右子树
}
int main() {
int n;
scanf("%d", &n); // 输入节点数
// 输入每个节点的左右子节点编号
for (int i = 1; i <= n; i++) {
scanf("%d %d", &tree[i].l, &tree[i].r);
}
dfs(1, 1); // 从根节点开始搜索,初始深度为1
printf("%d\n", ans); // 输出最大深度
return 0;
}
#include <stdio.h>
// 定义结构体 node 表示二叉树的节点,每个节点包含左子节点 l 和右子节点 r
struct node {
char l;
char r;
} tree[200];
// 深度优先搜索函数,用于实现二叉树的先序遍历(根 - 左 - 右)
// pos: 当前正在处理的节点值
void dfs(char pos) {
// 输出当前节点的值,实现先序遍历中先访问根节点的操作
printf("%c", pos);
// 如果当前节点的左子节点不是 '*'(这里 '*' 表示空节点),则递归遍历左子树
if (tree[pos].l!= '*') {
dfs(tree[pos].l);
}
// 如果当前节点的右子节点不是 '*'(这里 '*' 表示空节点),则递归遍历右子树
if (tree[pos].r!= '*') {
dfs(tree[pos].r);
}
}
int main() {
int n;
char a, b;
// 读取二叉树的节点个数
scanf("%d", &n);
// 循环读取每个节点的信息
for (int i = 1; i <= n; i++) {
// 读取当前节点的值
scanf(" %c", &a);
// 记录第一个节点的值,作为二叉树的根节点
if (i == 1) {
b = a;
}
// 读取当前节点的左子节点和右子节点的值
scanf("%c%c", &tree[a].l, &tree[a].r);
}
// 从根节点开始进行深度优先搜索(先序遍历)
dfs(b);
return 0;
}