2024王道408数据结构 P144 T10

2023-10-29

2024王道408数据结构 P144 T10

思考过程

  1. 这题也比较简单,首先看题目,要求我们用先序遍历求二叉树中第k个结点的值。那道理我们都懂直接开始敲代码。
  2. 先建立一个计数器i和一个char类型的值ch,用来暂时存放data值
    • 当i==k时就说明已经找到第k个结点了,我们只需要返回当前二叉树的data值就好了if (i==k) return t->data;
    • 当i不等于k时就说明没有找到第k个结点,此时先让i++,然后再去用递归去遍历当前结点的左子树,PreNode(t->lchild, k);
  3. 在遍历右子树之前先判断ch的值
    • 如果此时ch不等于’#',也就是该结点不为空,就说明左子树还没有遍历完,我们就已经找到了第k个结点,那我们直接return ch;就好了。
    • 如果ch=='#'就说明左子树已经遍历完了,我们依然没有找到第k个结点,那我们就递归开始遍历右子树ch = PreNode(t->rchild, k);
  4. 整个代码逻辑就是这样了。

举个例子

  1. 假设我们此时的二叉树长这个样子请添加图片描述先序遍历序列时ABDECFG,再假设此时k=3,也就是结点D。
  2. 先是建立一个变量i=1,此时i不等于k,i++,用该函数递归调用去遍历A的左子树B,再用一个变量ch去暂时存储B的值,再去判断此时i仍然不等于k,i++。
  3. 再去遍历B的左子树D,这就是用递归去先序遍历二叉树,此时发现i==k,则返回ch值。

完整代码

//
// Created by 黎圣  on 2023/8/17.
//
#include "iostream"
typedef struct TreeNode
{
    char data;
    struct TreeNode *lchild, *rchild;
}*tree;
void CreateTree(tree &t)
{
    char ch = getchar();
    if (ch == '#')
        t = NULL;
    else
    {
        t = (struct TreeNode*)malloc(sizeof(struct TreeNode));
        t->data = ch;
        t->lchild = NULL;
        t->rchild = NULL;
        CreateTree(t->lchild);
        CreateTree(t->rchild);
    }
}
int i = 1;
char ch;
char PreNode(tree &t, int k)
{
    if (t == NULL)
        return '#';
    if (i == k)
        return t->data;
    else
        i++;
    ch = PreNode(t->lchild, k);
    if (ch != '#')
        return ch;
    ch = PreNode(t->rchild, k);
    return ch;
}
int main()
{
    tree t;
    CreateTree(t);
    //ABD##E##CF##G##
    printf("%c", PreNode(t, 4));
    return 0;
}

这题也不难嗷,感谢b站up主@吸血小金鱼

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2024王道408数据结构 P144 T10 的相关文章

  • java中file操作

    File fo new File E pic old txt File f new File E pic new File fn new File E pic new test txt 1 创建文件夹 boolean mkdir 创建此抽象

随机推荐

  • vue3项目总结

    1 Pinia优化重复请求 在项目中 吸顶组件和首页的头部内容是一样的 所以不用发送两次请求 通过Pinia集中管理数据 再把数据给组件使用 只需要把请求封装在一个store里 调用即可使用 2 面板组件的封装 由于项目中的新鲜好物和人气推
  • 格 (数学)

    格 数学 维基百科 自由的百科全书 本文介绍的是 数学中的格 关于与 格 数学 同名的其他主题 详见 格 术语 格 lattice 来源于描述这种次序的 哈斯图的形状 在数学中 格是其非空有限子集都有一个上确界 叫并 和一个下确界 叫交 的
  • Linux常用技巧系列: Linux创建软链接ln -s,(更改cuda版本,从8.0到9.0,Cuda多版本共存, 图文教程)

    创建软连接在系统崩溃的时候也是经常用的功能 如果你已经需要用到 说明你对Linux系统已经有了一定的熟练程度 尤其在配置和修复mysql 配置cuda 不同版本的切换的时候 会用到 用法也非常简单 ln s source dir targe
  • Python数据结构:解锁高效编程

    今天 我们一起探索Python数据结构 以及它们如何利用他们编写高效和优雅的代码 为什么数据结构很重要 想象一下 您正在建造一座房子 您不会随意将砖块扔在一起 对吧 您会仔细规划并安排它们 以创建坚固的结构 嗯 编程也适用同样的原则 数据结
  • windows中的凭据管理

    前言 我们访问某个 带有密码的共有文件夹之后 只有在第一次访问的时候需要输入密码 只要记住密码 今后就可以一直访问 如何实现 通过windows的凭据管理来实现 如何查看凭据管理 step1 控制面板 step2 用户账户 凭据管理器 访问
  • 期货交易心得 Round 4

    期货市场永远是有赌性的 大家都在博弈 期货市场具有偶然性 不像其他行业 只要是一个优秀的企业家他的赢利就包含了更多的必然性 既然有赌性就涉及到赌的原则方法问题 首先的原则应该是赌钱不赌命 这里包括两方面含义 第一应该拿出你亏得起的钱到期货市
  • 大学生团体天梯赛(第三届)

    题目地址 天梯赛 include
  • 与失眠危机说再见,AI为你带来安宁的夜晚

    不知道你有没有这样的感觉 忙碌了一天 明明已经很累了 可依旧辗转反侧 难以入眠 只能睁着眼睛熬到天亮 不是不想睡 也不是不累 只是睡不着 失眠的感觉实在是太痛苦了 特别是第二天早上常常顶着两只熊猫眼 干什么都提不起劲 身体仿佛要散架 为了拥
  • JS 实现队列

    通过JS实现队列的数据结构 首先是最普通的队列 先入先出 队列 function createQueue 队列 let queue 入队 const enQueue data gt if data null return queue pus
  • Python爬虫进阶必备

    XX街登陆密码加密 aHR0cDovL3NlbGxlci5jaHVjaHVqaWUuY29tL3NxZS5waHA cz0vVXNlci9pbmRleA 这个加密太简单了 五秒定位真的不是吹 所以直接来 输入错误的账号密码 发起登陆请求 可
  • SQL DATEPART()函数

    DATEPART datepart date 参数 datepart 是将为其返回 integer 的 date 日期或时间值 的一部分 下表列出了所有有效的 datepart 参数 用户定义的变量等效项是无效的 下表列出了所有 datep
  • 不涨薪的公司应不应该待?

    一个 5 年老员工 要求加薪 500 元遭拒 老板转头月薪 1 万招新人 结果 朋友出去转了一圈 找了个工资多 4000 的工作 立马就跳槽了 剩下 3 个人不干了 纷纷出去找工作 也找到了比之前多 4000 的工作 准备离职 老板一下子慌
  • 第十四章 网络

    一 客户端 服务器计算 Java提供ServerSocket类来创建服务器套接字 Socket类来创建客户端套接字 Internet 上的两个程序通过使用IO流的服务器套接字和客户端套接字进行通信 网络功能紧密地集成在Java中 Java
  • 情感分析学习笔记(3)——情感传播(sentiment propagation)

    sentiment propagation是我最近看论文最经常遇到的一个单词 并且网上这一块资源极其稀少 大部分都是新闻学或者心理学的论文 所以本文就谈谈我对情感传播的理解 Thanks to knowledge graph 让我能够百度的
  • gcov代码覆盖率使用gcov完成代码覆盖率的测试

    Gcov作为gnu gcc工作组件之一 是一款的免费的代码覆盖率测试工具 而且可以结合lcov生成美观的html的测试报表 本文介绍一些gcov的使用方法 基本原理 一些实际中可能会遇到的问题以及解决思路 Gcov的用法 1 1 编译 Gc
  • 深度思考:老生常谈的双亲委派机制,JDBC、Tomcat是怎么反其道而行之的?

    要说双亲委派机制 还得从类加载器的类型谈起 一 类加载器的类型 类加载器有以下种类 启动类加载器 Bootstrap ClassLoader 扩展类加载器 Extension ClassLoader 应用类加载器 Application C
  • 【杭电错题】#12青年歌手大奖赛_评委会打分——最优解

    题目 青年歌手大奖赛中 评委会给参赛选手打分 选手得分规则为去掉一个最高分和一个最低分 然后计算平均得分 请编程输出某选手的得分 Input 输入数据有多组 每组占一行 每行的第一个数是n 2
  • 编程小技巧:四舍五入

    今天跟大家分享的小技巧是跟浮点数取整相关 我们知道计算机在为浮点数取整是通常是向零取整 也就是说会自动将浮点数的小数部分忽略掉 例如下面的例子 float a 3 68 int b int a 我们将变量a取整后赋值给变量b 则变量b的值为
  • 善用用户自定义信号

    kill l可以看到用户自定义信号 然后就可以在程序中注册使用此信号 通过killall 10 xxx 就可以给程序发送用户自定义信号 kill 6 可以让程序产生段错误
  • 2024王道408数据结构 P144 T10

    2024王道408数据结构 P144 T10 思考过程 这题也比较简单 首先看题目 要求我们用先序遍历求二叉树中第k个结点的值 那道理我们都懂直接开始敲代码 先建立一个计数器i和一个char类型的值ch 用来暂时存放data值 当i k时就