2024王道408数据结构P144 T16

2023-11-16

2024王道408数据结构P144 T16

思考过程

  1. 首先看题目,要求我们把二叉树的叶子结点求出来并且用链表的方式存储,链接时用叶结点的右指针来存放单链表指针。我们很清楚可以看出来能用中序遍历+递归的方式实现,因为第一个叶子结点在整棵树的最左下角。
  2. 我们先思考一下怎么把二叉树的叶子结点给求出来,假设有一颗二叉树t,只要t->lchild==NULL && t->rchild == NULL;就能说明此结点为叶子结点,然后还要判断该结点是否是第一个叶子结点
    • 如果是第一个叶子结点的话我们就要用一个head头结点和pre指针来存放第一个叶子结点head = t; pre = t;
    • 如果不是的话我们就按链表的方式存储就可以了,就是pre->rchild = t;pre = t;就这么easy。

举个例子

  1. 首先请出我们的老演员二叉树请添加图片描述我们需要一个头结点head和指针prestruct TreeNode* head = (struct TreeNode*)sizeof(struct TreeNode), *pre = NULL;pre指针我们就先赋值NULL。
  2. 然后我们直接开始递归到最左边的结点也就是结点D,Inorder(t->lchild);因为是中序遍历,先访问左子树。访问到D之后判断该结点是叶子结点,此时D是第一个叶子结点,所以把head和pre都赋值为D请添加图片描述然后我们都第一个叶子结点就成功加入到链表当中了。
  3. 然后代码回溯到结点B,再去找B到右子树E。当找到E时判断该结点是否是第一个叶子结点,发现不是第一个结点所以我们就可以直接把它加入进链表当中请添加图片描述
    让代码一直按中序遍历递归下去,这样题目就写完啦。

完整代码

//
// Created by 黎圣  on 2023/8/25.
//
#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);
    }
}
struct TreeNode *pre = NULL, *head = (struct TreeNode*)malloc(sizeof(struct TreeNode));
tree Inorder(tree &t)
{
    if (t)
    {
        Inorder(t->lchild);
        if (t->lchild == NULL && t->rchild == NULL)
        {
            //是否是第一个
            //是
            if (pre == NULL)
            {
                head = t;
                pre = t;
            }
            //不是第一个
            else
            {
                pre->rchild = t;
                pre = t;
            }
        }
        Inorder(t->rchild);
    }
    return head;
}
int main()
{
    tree t;
    CreateTree(t);
    //ABD##E##CF##G##
    Inorder(t);
    while (head)
    {
        printf("%c ", head->data);
        head = head->rchild;
    }
    return 0;
}

最后感谢b站up主@吸血小金鱼

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

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

随机推荐

  • 20数学建模校赛C题数据清理思路

    也就是这个看起来平平无奇的题目 我们觉得C题还能做 首先导入文件 导入库 import pandas as pd import numpy as np import matplotlib pyplot as plt from pandas
  • Linux系统基本操作及命令详解

    Linux系统基本操作及命令详解 前言 一 Linux命令基础 1 shell 1 1 shell概述 1 2 shell的作用 2 Linux命令的分类 2 1 内部命令与外部命令的区别 2 2 查看内部命令 2 3 禁用内部命令及重启内
  • 序列最小最优化算法(SMO算法)

    前面三篇我已经谈了谈我对支持向量机的理解 推到了各类支持向量机的对偶算法 我们有很多最优化算法来求解这个问题 但是样本容量很大时 这些算法会变得非常低效 人们就提出了很多快速实现算法 SMO算法就是其中之一 主要是用来解这个对偶问题 s t
  • PCL RANSAC拟合球体(C++详细过程版)

    目录 一 算法原理 二 代码实现 三 结果展示 一 算法原理 RANSAC拟合球体的算法原理已在其他博客中多次进行过详细描述 如PCL RANSAC拟合空间3D球体等 并且相关论文也很丰富 因此 这里不再做算法原理的重复阐述 本文重点在于使
  • 打印堆栈

    traceback print stack
  • SVN相关

    svn更新失败提示cleanup的解决方法 问题解决 https blog csdn net study4034 article details 80656882 注意关闭unity SVN更新后提示 One or more files a
  • 卷(二)C++___二刷

    Chapter 8 Type Conversion and Function Overloading 8 1 Implicit type conversion coercion The integer value 3 might be st
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方SPI FLASH demo中功能的复现 进行相关内容的学习及探讨 实现功能 功能 lua快速驱动 W25QXX XX代
  • windows:自定义内网ip后无法上网

    有可能能是ip冲突
  • Markdown给公式添加编号

    Markdown给公式添加编号 a 2 b 2 c 2 tag 1 2 由公式 1 2 即可得到结论
  • Eureka集群原理

    问题 微服务RPC远程服务调用最核心的是什么 高可用 试想你的注册中心只有一个only one 它出故障了那就呵呵o o了 会导致整个微服务环境不可用 解决办法 搭建Eureka注册中心集群 实现负载均衡 故障容错 Eureka集群的原理
  • c语言之字符串数组

    还是在写图的存储结构的时候 遇到了问题 就是如何在一个数组中存放字符串 我相信这个问题 对于面向对象的编程语言来说 轻而易举 比如对于Java来说 直接像下面就可以了 但是c语言没有String这个类型 能想到存放字符串的数据类型就是cha
  • 千万级SQL Server数据库表分区的实现

    一般在千万级的数据压力下 分区是一种比较好的提升性能方法 本文将介绍SQL Server数据库表分区的实现 AD 最近使用SQL SERVER一个的缓存 数据量一天100w的速度增长 同时接受客户查询 速度由于数据量越来越大越来越慢 这里感
  • vue3+ts 时间戳转日期格式

    时间戳转换成日期格式 调用 timestampToTime 1680498539 日期补0 const getzf num number string number gt const numShow string number num lt
  • EXCEL 做的购订单管理系统

    EXCEL 做的购订单管理系统 需要的下载 采购订单管理系统 01 总体说明 1 本系统主要用于采购订单以及付款管理 可进行供应商信息 产品信息的基础信息维护 可录入采购明细对采购金额进行付款 可对采购按照产品和采购日期范围查询 对采购明细
  • memset和memset_s

    void memset void s int ch size t n 函数解释 将s中前n个字节 typedef unsigned int size t 用 ch 替换并返回 s memset 作用是在一段内存块中填充某个给定的值 它是对较
  • TTransportException: java.net.ConnectException: Connection refused: connect异常

    看视频学用Thrift时遇到的 环境 win7 thrift 0 12 0 python37 jdk1 8 IDE IJ PC 本机java客户端 连 本机python服务器 部分代码 serverSocket TSocket TServe
  • 数据挖掘-数据探索(EDA)

    数据探索 EDA Exploratory Data Analysis 1 EDA的作用 EDA的作用主要在于熟悉并了解数据集 对数据集进行处理 以便接下来机器学习或者深度学习使用 了解数据集之后 接下来就是了解数据集中各变量间的相互关系 变
  • 2020年6月100篇最新GAN论文汇总

    点击上方 机器学习与生成对抗网络 关注 星标 获取有趣 好玩的前沿干货 戳我 查看GAN的系列专辑 据不完全统计 GAN在CVPR2020上超115篇之多 其中 可看到GAN在朝着无监督 自监督 弱监督 半监督 少样本 单样本 零样本 多模
  • 2024王道408数据结构P144 T16

    2024王道408数据结构P144 T16 思考过程 首先看题目 要求我们把二叉树的叶子结点求出来并且用链表的方式存储 链接时用叶结点的右指针来存放单链表指针 我们很清楚可以看出来能用中序遍历 递归的方式实现 因为第一个叶子结点在整棵树的最