总结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;

}

相关推荐
星轨初途10 分钟前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
f***01931 小时前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
小曹要微笑2 小时前
STM32F7 时钟树简讲(快速入门)
c语言·stm32·单片机·嵌入式硬件·算法
前端世界4 小时前
float 还是 double?用储罐体积计算带你看懂 C 语言浮点数的真实世界坑
java·c语言·开发语言
小青龙emmm5 小时前
2025级C语言第二次周测(国教专用)题解
c语言·开发语言·算法
学习路上_write5 小时前
FREERTOS_互斥量_创建和使用
c语言·开发语言·c++·stm32·单片机·嵌入式硬件
程序猿编码7 小时前
PRINCE算法的密码生成器:原理与设计思路(C/C++代码实现)
c语言·网络·c++·算法·安全·prince
charlie1145141918 小时前
深入理解C/C++的编译链接技术6——A2:动态库设计基础之ABI设计接口
c语言·开发语言·c++·学习·动态库·函数
white-persist8 小时前
【攻防世界】reverse | Reversing-x64Elf-100 详细题解 WP
c语言·开发语言·网络·python·学习·安全·php
Want5958 小时前
C/C++贪吃蛇小游戏
c语言·开发语言·c++