数据结构:C语言实现二叉树的构建以及遍历操作

2023-11-09

使用二叉链表的存储结构存储二叉树:

typedef struct BinNode{
    int data;
    struct BinNode *lchild;
    struct BinNode *rchild;
}BinNode,*BinTree;
BinTree binTree;

一个简单的结构体存储节点。。

递归的思想实现对二叉树的遍历构建以及查找操作

先序遍历:

void firstSeek(BinTree node){
	if(node==NULL){
		return;
	}
	printf("%d ",node->data);
	firstSeek(node->lchild);
	firstSeek(node->rchild);
} 

中序遍历:

void midSeek(BinTree node){
	if(node==NULL)
		return ;
	midSeek(node->lchild);
	printf("%d ",node->data);
	midSeek(node->rchild);
} 

后序遍历:

void lastSeek(BinTree node){
	if(node==NULL)
		return ;
	lastSeek(node->lchild);
	lastSeek(node->rchild);
	printf("%d ",node->data);
} 

代码很简单,理解了二叉树的基本结构和递归思想是关键

可以输入数据测试一下代码,构建二叉树输入叶子节点的左右孩子时输入数据置-1即可:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm> 
#include<cstdlib>
#define ElemType int
using namespace std;

typedef struct BinNode{
	int data;
	struct BinNode *lchild;
	struct BinNode *rchild;
}BinNode,*BinTree;
BinTree binTree;
//先序建立
void createBinTree(BinTree &binTree){
	ElemType info;
	BinNode *r,*l,*s;
	scanf("%d",&info);
	if(info==-1){
		return ;
	}
	if(binTree==NULL){
		binTree =  (BinNode *)malloc(sizeof(BinNode));
		binTree->data=info;
		binTree->lchild=NULL;
		binTree->rchild=NULL;
	}
	createBinTree(binTree->lchild);
	createBinTree(binTree->rchild);
} 
 
//先序遍历
void firstSeek(BinTree node){
	if(node==NULL){
		return;
	}
	printf("%d ",node->data);
	firstSeek(node->lchild);
	firstSeek(node->rchild);
} 
//中序遍历
void midSeek(BinTree node){
	if(node==NULL)
		return ;
	midSeek(node->lchild);
	printf("%d ",node->data);
	midSeek(node->rchild);
} 
//后续遍历
void lastSeek(BinTree node){
	if(node==NULL)
		return ;
	lastSeek(node->lchild);
	lastSeek(node->rchild);
	printf("%d ",node->data);
} 
 
int main(){
	createBinTree(binTree);
	printf("二叉树构建完成!\n先序遍历:");
	firstSeek(binTree);
	printf("\n中序遍历:");
	midSeek(binTree);
	printf("\n后续遍历:");
	lastSeek(binTree);
	return 0;
}

以上仅供参考,欢迎纠错讨论

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

数据结构:C语言实现二叉树的构建以及遍历操作 的相关文章

随机推荐

  • 枚举子集复杂度 O(n^3) 证明

    困扰多年的问题 居然在学习离散数学后的一分钟内得到解决 形式化问题为 求满足 A B S A sube B sube S A B S 的有序对
  • 解读三大财务报表

    三张报表是一体化的报表 但在不同的报表里 概念之间有些差异 大家应该适应此情况 这是全球性的问题 三张报表实际上是站在两个不同的角度 实际上 两个体系 维度 描述了同样的经济活动 但它们各自描述经济活动的方式是不一样的
  • java 枚举数据字典_枚举值当数据字典使用

    public interface EnumType enum E TRANCALL AFTER SUBTRAN PROCESS AFTER SUBTRAN PROCESS afterSubtranProcess 子交易处理模板后 Commo
  • 磁盘使用率大于90% 磁盘inode使用率大于90%

    线上机器一直再报 磁盘使用率大于90 发现 var log 下边有个mail文件 很大就直接清理掉 gt mail 但是这个问题反复出现 感觉一个没有什么业务的机器怎么磁盘使用率那么大 就查了下mail日志文件的形成 ps 发现有好多sen
  • Tigase开发笔记6:packet流转机制 -> 一条消息(packet)的请求和响应过程解析

    初看Tigase的packet内部流转机制一开始不是太明白 里面用到了较多的线程 代码不太看得懂 慢慢的通过一条消息的请求和响应的代码跟踪分析 搞清楚了消息流转的过程 前言 本文使用Tigase Server version 7 0 2 进
  • [考研数学]概率论难点总结:样本标准差,样本均值,均值的期望和方差,与t分布、卡方分布和F分布的关系及推导

    首先需要清楚一件事情 样本均值为X拔 上面有个棍 样本的均值是讲从总体中抽样 这些样本的均值 而均值是指所有样本的真实均值 后面部分很好推导 将括号展开后 由三部分组成 中间的部分为2倍的样本和样本均值的乘积 将样本的和变成n倍的样本均值即
  • MVC ——RouteTable.Routes的使用

    public class RouteTable Fields private static RouteCollection instance new RouteCollection Properties public static Rout
  • ubuntu64位安装交叉编译器出现一些问题

    安装交叉编译工具时 因为交叉编译工具为32位的 而我的ubuntu51 10是64位的 使用交叉编译工具时会出错 一般是安装 apt get install lib32ncurses5 再有出错就去安装对应的库吧 如libstdc so 6
  • 50行代码,实现AI文章生成器,牛逼!

    本文共1502字 预计阅读时间 3分钟 据说 AI 已经可以自动写文章 类似的报道屡见不鲜 但是 AI 写出来的文章到底是什么样的 我想没几个人见识过 无意中看到了 Gayhub 上的这个项目 全称就是 狗屁不通文章生成器 英文名字是 Bu
  • mongovue 导入mysql_【mongo】用户添加、导入数据库、连接VUE

    添加用户 1 安装mongo时最好用apt get install 因为这样可以省去很多麻烦 比如一些环境变量 还有一些文档路径等等的问题 2 确认一下自己的mongodb和mongodb clients的版本 要版本一致才可以 查看mon
  • Linux 中power supply软件架构和相关API

    一 概述 电源管理整体上可以分为两个部分 一个是电池监控 fuel gauge 另外一个是充放电管理 这两部分在内核中也是分为两个驱动来管理 fuelgauge驱动的功能主要是负责向上层Android系统提供当前电池的电量和健康信息等等 同
  • React + MobX - 完全上手指南

    React MobX 完全上手指南 前言 正文 MobX 準備工作 MobX 基本使用 Store Action 組件中 MobX 生效 MobX Decorators MobX Decorators 準備工作 使用 MobX Decora
  • 超详细JDK1.8安装教程

    1 下载并安装 jdk 8u241 windows x64 JDK 8下载地址 https pan baidu com s 1 DN 5RL0mlURsN8dzYjqgw 提取码 rg5n 可自定义目录 之后配置环境变量会用到 一直下一步即
  • QThread使用方法

    QThread使用方法 昨天不小心看到Qt开发人员 Bradley T Hughes Blog中的一片文章 you are doing it wrong 结果看得头昏脑胀 好歹也自学了近1年的Qt 也一直很小心 很认真地阅读Qt和manua
  • Verilog中Case语句

    转自 https blog csdn net CLL caicai article details 104395480 实际问题中常常需要用到多分支选择 使用if语句导致内容繁琐 更明智的做法是使用case语句 case语句是一种多分支选择
  • 七牛云入门使用步骤(图片服务器使用)

    登入七牛云官网得到3个比较重要的参数 如图 1 sk 2 ak 3 测试域名 第一步导入七牛云sdk
  • 数据结构-查找(顺序查找与二分查找的讲解与代码实现)

    顺序查找概念 从表的另一端开始 一次将记录的关键字和给定值进行比较 若某个记录的关键字和给定的值相等 则查找成功 反之则查找失败 ASL 平均查找长度 pi查找概率 ci查找次数 eg 序列1 2 3 查找1的次数为1概率为1 3 2为两次
  • AdaCost

    AdaCost算法 参考 AdaCost Misclassification Cost sensitive Boosting 代价敏感 错分类的损失很大的样例 比如新冠肺炎本来是阳性但是被检测出阴性 Cost sensitive思想是一种符
  • 半导体行业深度报告:从应用到行业的全面复苏

    来源 国金证券 一 2020 2021年全球半导体市场投资展望 多种因素导致全球半导体市场于 2019 年同比下跌近 13 到 4 102 亿美元 而存储器行业同比下跌超过 30 逻辑半导体同比下跌近 2 存储器市场占全球半导体市场达到近三
  • 数据结构:C语言实现二叉树的构建以及遍历操作

    使用二叉链表的存储结构存储二叉树 typedef struct BinNode int data struct BinNode lchild struct BinNode rchild BinNode BinTree BinTree bin