当前位置: 首页 > article >正文

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

}

 


http://www.kler.cn/a/517448.html

相关文章:

  • OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
  • 【玩转全栈】----Django连接MySQL
  • Linux的基本指令(上)
  • rocketmq顺序消费简述
  • SpringBoot开发(三)SpringBoot介绍、项目创建、运行
  • C# 控制打印机:从入门到实践
  • Qt —— 控件属性(二)
  • C++的new和delete
  • C#集合排序的三种方法(List<T>.Sort、LINQ 的 OrderBy、IComparable<T> 接口)
  • 前端开发常用的设计模式有哪些
  • 机器学习-学习类型
  • Mysql意向锁
  • 深入解析 Linux 内核中的 InfiniBand 驱动接口:ib_verbs.h
  • 二叉树相关oj题 1. 检查两颗树是否相同。
  • 多线程详解——IntentService工作原理(源码详解)
  • PC端实现PDF预览(支持后端返回文件流 || 返回文件URL)
  • 【竞技宝】DOTA2:NAVI junior被ESL取消参赛资格
  • springfox-swagger-ui 3.0.0 配置
  • 无监督学习:聚类、异常检测
  • C++AVL树(二)详解
  • 港科夜闻 | 香港科大获三千万基金资助,开发人工智能英语评估及学习系统,供全港中学生免费使用...
  • PostgreSQL中级专家是什么意思?
  • AI问答:在后端开发语境中 VO 是什么 / Value Object / 值对象
  • 第12章 volatile关键字的介绍(Java高并发编程详解:多线程与系统设计)
  • Lua语言的图形用户界面
  • Vue3 插槽(Slots)用法总结