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

二叉树实现

结构体创建

核心逻辑
定义了二叉树的基本结构 TreeNode,每个节点包含一个字符型数据 data,以及指向左右子树的指针 leftright

typedef char DataType;typedef struct BiTNode 
{DataType data;struct BiTNode *left;struct BiTNode *right;
} TreeNode;
树的创建(前序构造)

核心逻辑
利用前序遍历方式,根据字符数组构造二叉树。遇到 # 表示该节点为空(空子树)。递归构造左右子树。

DataType data[] = "Abd#g###ce#h##fi###";
int ind = 0;void CreatTree(TreeNode **tree) 
{char c = data[ind++];if (c == '#') {*tree = NULL;return;} else {*tree = malloc(sizeof(TreeNode));if (*tree == NULL) {printf("malloc tree error\n");return;}(*tree)->data = c;CreatTree(&(*tree)->left);CreatTree(&(*tree)->right);}
}
三种遍历函数

核心逻辑

        前序遍历(根-左-右):先访问当前节点,再访问左子树和右子树。

        中序遍历(左-根-右):先访问左子树,再访问当前节点,最后访问右子树。

        后序遍历(左-右-根):先访问左子树和右子树,最后访问当前节点。

void PreOrderTraverse(TreeNode *tree) 
{if (tree == NULL) return;printf("%c", tree->data);PreOrderTraverse(tree->left);PreOrderTraverse(tree->right);
}void InoderderTraverse(TreeNode *tree) 
{if (tree == NULL) return;InoderderTraverse(tree->left);printf("%c", tree->data);InoderderTraverse(tree->right);
}void PosederTraverse(TreeNode *tree) 
{if (tree == NULL) return;PosederTraverse(tree->left);PosederTraverse(tree->right);printf("%c", tree->data);
}
层序遍历函数 ShowTree

核心逻辑

        通过辅助队列 lqe 进行层序遍历,从上至下、从左至右访问每一个节点。队列中维护每层的节点顺序,每次出队一个节点,就将其左右子节点(如果存在)入队,直到队列为空

模块函数名功能说明
节点结构TreeNode定义二叉树节点数据结构
树构建CreatTree递归前序方式构建二叉树(支持空节点)
前序遍历PreOrderTraverse根 -> 左 -> 右
中序遍历InoderderTraverse左 -> 根 -> 右
后序遍历PosederTraverse左 -> 右 -> 根
层序遍历ShowTree借助队列按层输出节点内容
主程序入口main构建树、调用遍历函数测试
http://www.xdnf.cn/news/1262215.html

相关文章:

  • Docker 创建镜像错误记录
  • Redis缓存击穿、穿透雪崩
  • 【NFTurbo】基于DockerCompose一键部署
  • gmssl私钥文件格式
  • 用户组权限及高级权限管理:从基础到企业级 sudo 提权实战
  • 《从零构建大语言模型》学习笔记2,文本数据处理1(以及tiktoken库无法下载gpt2参数,调用get_encoding时SSL超时的解决方法)
  • Redis是单线程性能还高的原因
  • SaaS 版 MES 系统业务文档
  • 【SpringBoot】SpringBoot配置
  • GPT OSS 双模型上线,百度百舸全面支持快速部署
  • 华为USG防火墙双机,但ISP只给了1个IP, 怎么办?
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(上)
  • C++信息学奥赛一本通-第一部分-基础一-第2章-第5节
  • 单层 PDF 与双层 PDF:一字之差,功能大不同
  • 修复C++14兼容性问题 逻辑检查
  • 力扣-238.除自身以外数组的乘积
  • FileLink:企业数据传输的革新者​
  • Node.js Turbo 包入门教程
  • Sklearn 机器学习 数据降维PCA 使用PCA算法
  • Spark在什么情况下CBO才会判断失误,如何避免
  • 什么是2米分辨率卫星影像数据?
  • Flutter开发 多孩子布局组件
  • 面向真实场景的定制化图像降质模型设计方案
  • 化工厂安全升级:分布式光纤传感的 “实时监测 + 精准预警” 方案
  • VRTE 的应用程序部署到Ubuntu上 报错:bash: ./rb_exmd: No such file or directory
  • 高效数据隔离方案:SpringBoot + JSqlParser 全解析!
  • [windows]torchsig 1.1.0 gr-spectrumdetect模块安装
  • 第七篇:动画基础:requestAnimationFrame循环
  • Java-反射
  • 【华为机试】63. 不同路径 II