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

数据结构-C语言递归实现树的前中后序遍历

#include <stdio.h>
#include <stdlib.h>
typedef struct tree
{
	int number ; 
	struct tree *left  ; 
	struct tree *right ; 
}TREE;
//对树插入节点 
void insert_tree(TREE **header , int number)
{
    //创建一颗树 
	TREE *New = NULL ; 
	New = malloc(sizeof(TREE));
	if(NULL == New)
	   return ;
	//初始化树节点的值 
	New->number = number ; 
	//分别将左子树和右子树设置为空 
	New->left = NULL ; 
	New->right = NULL ; 
	TREE **link = header ; 
	TREE *cur ; 
	while(cur = *link)
	{ 
        //判断新插入的节点和之前的值之间谁大谁小
        //小的就放在左子树,大的就放到右子树 
		if(New->number < cur->number)
			//*link = cur->left ; 
			link = &(cur->left) ;
		else
			link = &(cur->right) ; 
	}
	*link = New ;
}
//打印树 
void print_tree(TREE *header , int lever)
{
	if(header == NULL)
		return ; 
	
	print_tree(header->right , lever+1);
	int i ; 
	for(i = 0 ; i < lever ; i++)
		printf("\t");
	printf("%d\n" , header->number);

	print_tree(header->left , lever+1);
}
//树的前序遍历 
void front(TREE *header)
{
	if(header == NULL)
		return ; 
	printf("%d " , header->number);
	front(header->left);
	front(header->right);
}
//树的中序遍历 
void middle(TREE *header)
{
	if(header == NULL)
		return ; 
	middle(header->left);
	printf("%d " , header->number);
	middle(header->right);
}
//树的后序遍历 
void back(TREE *header)
{
	if(header == NULL)
		return ; 
	back(header->left);
	back(header->right);
	printf("%d " , header->number);
}

int main(void)
{
    int i ; 
    int buffer[10] ;
    TREE *header = NULL ;
    for(i = 0 ; i < 10 ; i++)
    {
        buffer[i] = rand()%100 ;
    }
    for(i = 0 ; i < 10 ; i++)
    {
        //给树插入元素 
        insert_tree(&header , buffer[i]);
    }
    print_tree(header , 1);
    printf("\n前序遍历\n");
    front(header);
    printf("\n中序遍历\n");
    middle(header);
    printf("\n后序遍历\n");
    back(header);
    getchar();
}

相关文章:

  • 核心动画(Core Animation)
  • url模块 和 querystring模块
  • APP开发的一些简单流程思路
  • querystring 查询字符串模块
  • 查看数据库表的数据量和SIZE大小的脚本修正
  • commonJS模块化
  • HDU4185 Oil Skimming(匈牙利)
  • yarn 和 bower的使用
  • phpcms 绑定域名
  • Python笔记:除、取整、取余、乘方
  • 父组件向子组件传值
  • 数加分析型数据库:让你的数据探索更灵活、准确、快速响应和高并发
  • 子组件 向 父组件传值
  • Vue ES6 Jade Scss Webpack Gulp
  • 关于mysql一些锁问题的总结
  • 10个确保微服务与容器安全的最佳实践
  • cookie和session
  • HashMap剖析之内部结构
  • in typeof instanceof ===这些运算符有什么作用
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • leetcode46 Permutation 排列组合
  • Linux Process Manage
  • nginx 负载服务器优化
  • passportjs 源码分析
  • 分类模型——Logistics Regression
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 记录:CentOS7.2配置LNMP环境记录
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 马上搞懂 GeoJSON
  • 前端路由实现-history
  • 正则表达式小结
  • Java数据解析之JSON
  • ​secrets --- 生成管理密码的安全随机数​
  • #git 撤消对文件的更改
  • #HarmonyOS:Web组件的使用
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $.ajax中的eval及dataType
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (pytorch进阶之路)扩散概率模型
  • (多级缓存)缓存同步
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (一) storm的集群安装与配置
  • (转)菜鸟学数据库(三)——存储过程
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .form文件_一篇文章学会文件上传
  • .NET Core 版本不支持的问题
  • .NET 设计一套高性能的弱事件机制
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET学习全景图
  • @GlobalLock注解作用与原理解析
  • @vue/cli 3.x+引入jQuery
  • [ 蓝桥杯Web真题 ]-布局切换
  • [C#小技巧]如何捕捉上升沿和下降沿