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

2024王道408数据结构P144 T16

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主@吸血小金鱼

http://www.lryc.cn/news/145707.html

相关文章:

  • 【ARM Coresight 系列文章 22 -- linux frace 与 trace-cmd】
  • MyBatis的一级缓存和二级缓存是怎么样的?
  • 下载的文件被Windows 11 安全中心自动删除
  • 【Java List与数组】List<T>数组和数组List<T>的区别(124)
  • Nuxt 菜鸟入门学习笔记四:静态资源
  • C语言 - 结构体、结构体数组、结构体指针和结构体嵌套
  • python安装playwright问题记录
  • 关于gRPC微服务利弊之谈
  • 【Terraform学习】使用 Terraform创建Lambda函数启动EC2(Terraform-AWS最佳实战学习)
  • Mac软件删除方法?如何删除不会有残留
  • 编程之道:【性能优化】提高软件效率的实际建议和避免常见陷阱
  • VGG的结构:视觉几何组(Visual Geometry Group)
  • VBA:按照Excel工作表中的名称列自动汇总多个工作薄中对应sheet中所需要的数据
  • Mybatis1.9 批量删除
  • CUDA小白 - NPP(2) -图像处理-算数和逻辑操作(2)
  • python+redis实现布隆过滤器(含redis5.0版本以上和5.0以下版本的两份代码)
  • SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29)
  • 【核磁共振成像】并行采集MRI
  • 深度图相关评测网站
  • 本地部署 CodeLlama 并在 VSCode 中使用 CodeLlama
  • Agilent33220A任意波形发生器
  • springboot第37集:kafka,mqtt,Netty,nginx,CentOS,Webpack
  • NVIDIA DLI 深度学习基础 答案 领取证书
  • axios模拟表单提交
  • 智安网络|探索物联网架构:构建连接物体与数字世界的桥梁
  • 胡歌深夜发文:我对不起好多人
  • C++二级题
  • NetApp AFF A900:适用于数据中心的超级产品
  • 入海排污口水质自动监测系统,助力把好入河入海“闸门”
  • AUTOSAR知识点 之 ECUM (一):基础知识梳理(概念部分)