C语言二叉树的创建与遍历

这篇具有很好参考价值的文章主要介绍了C语言二叉树的创建与遍历。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二叉树的创建与遍历



前言

二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。以下是对链式存储结构的二叉树的创建与先序、中序、后序遍历操作。


一、二叉树的结构

typedef struct Node {								//定义Node节点
	char data;										//data数据域
	struct Node* Lchild;							//左孩子
	struct Noed* Rchild;							//右孩子
}Node;

二、二叉树创建和三种遍历

1.

代码如下(示例):

void creatTree(Node** tree,char* data,int* index)	//创建树,这里使用二级指针是因为当tree创建其左右孩子时需要使用到二级指针指向他们的数据域以及指针域
{
	char temp;										//temp用于保存data里面的数据
	temp = data[*index];							//index是为了方便对全局变量的操作
	*index += 1;									//*index改变索引值
	if (temp == '#')								//如果temp值为#
	{
		*tree = NULL;								//tree指向NULL
	}
	else
	{
		*tree = (Node*)malloc(sizeof(Node));		//如果不等于#,则对其开辟空间保存
		(*tree)->data = temp;						/*data数据域进行赋值*/
		creatTree(&((*tree)->Lchild),data,index);	//创建树的左孩子,这里传入变量tree的指向的Lchild并且对其进行取地址符
		creatTree(&((*tree)->Rchild),data,index);	//如上使用遍历的方法进行创建
	}
}

2.前序遍历

代码如下(示例):

void printf_preTree(Node* tree)						//前序遍历,先是根,然后是左孩子,最后是右孩子
{
	if (tree == NULL)								//如果指向NULL则直接返回
	{
		return;
	}
	else
	{
		printf("%c->",tree->data);					//先打印根的data
		printf_preTree(tree->Lchild);				//再使用遍历的方法对Lchild进行打印
		printf_preTree(tree->Rchild);				//如上打印Rchild
	}
}

3.中序遍历

代码如下(示例):

void printf_ioTree(Node* tree)						//中序遍历,先是左孩子,然后就是根,再然后就是右孩子
{
	if (tree == NULL)
	{
		return -1;
	}
	else
	{
		printf_preTree(tree->Lchild);				//先找到最左的孩子
		printf("%c->", tree->data);					//然后打印data
		printf_preTree(tree->Rchild);				//再去打印根的孩子,最后会回到右孩子打印
	}
}

4.后序遍历

代码如下(示例):

void printf_lastTree(Node* tree)					//尾序打印,先打印左孩子,再右孩子,最后就是根
{
	if (tree == NULL)
	{
		return -1;
	}
	else
	{
		printf_lastTree(tree->Lchild);				//找到左边的孩子
		printf_lastTree(tree->Rchild);				//找到右边的孩子
		printf("%c->", tree->data);					//打印右边的孩子
	}
}

5.测试代码

代码如下(示例):

#include<stdio.h>
#include<stdlib.h>

typedef struct Node {								//定义Node节点
	char data;										//data数据域
	struct Node* Lchild;							//左孩子
	struct Noed* Rchild;							//右孩子
}Node;

void creatTree(Node** tree,char* data,int* index)	//创建树,这里使用二级指针是因为当tree创建其左右孩子时需要使用到二级指针指向他们的数据域以及指针域
{
	char temp;										//temp用于保存data里面的数据
	temp = data[*index];							//index是为了方便对全局变量的操作
	*index += 1;									//*index改变索引值
	if (temp == '#')								//如果temp值为#
	{
		*tree = NULL;								//tree指向NULL
	}
	else
	{
		*tree = (Node*)malloc(sizeof(Node));		//如果不等于#,则对其开辟空间保存
		(*tree)->data = temp;						/*data数据域进行赋值*/
		creatTree(&((*tree)->Lchild),data,index);	//创建树的左孩子,这里传入变量tree的指向的Lchild并且对其进行取地址符
		creatTree(&((*tree)->Rchild),data,index);	//如上使用遍历的方法进行创建
	}
}

void printf_preTree(Node* tree)						//前序遍历,先是根,然后是左孩子,最后是右孩子
{
	if (tree == NULL)								//如果指向NULL则直接返回
	{
		return;
	}
	else
	{
		printf("%c->",tree->data);					//先打印根的data
		printf_preTree(tree->Lchild);				//再使用遍历的方法对Lchild进行打印
		printf_preTree(tree->Rchild);				//如上打印Rchild
	}
}

void printf_ioTree(Node* tree)						//中序遍历,先是左孩子,然后就是根,再然后就是右孩子
{
	if (tree == NULL)
	{
		return -1;
	}
	else
	{
		printf_preTree(tree->Lchild);				//先找到最左的孩子
		printf("%c->", tree->data);					//然后打印data
		printf_preTree(tree->Rchild);				//再去打印根的孩子,最后会回到右孩子打印
	}
}

void printf_lastTree(Node* tree)					//尾序打印,先打印左孩子,再右孩子,最后就是根
{
	if (tree == NULL)
	{
		return -1;
	}
	else
	{
		printf_lastTree(tree->Lchild);				//找到左边的孩子
		printf_lastTree(tree->Rchild);				//找到右边的孩子
		printf("%c->", tree->data);					//打印右边的孩子
	}
}

void main(void)
{
	Node* tree;
	int index = 0;
	char data[] = "AB##C##";
	creatTree(&tree,data,&index);
	printf_preTree(tree);
	printf("\n");
	printf_ioTree(tree);
	printf("\n");
	printf_lastTree(tree);
	printf("\n");
	return 0;
}



总结

上述如有错误地方,请指出,谢谢啦。文章来源地址https://www.toymoban.com/news/detail-743382.html

到了这里,关于C语言二叉树的创建与遍历的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二叉树的创建及遍历方法

    目录 1、二叉树的定义及特点 2、满二叉树和完全二叉树的概念 3、二叉树的存储结构 4、创建二叉树 5、树的四种遍历方法 6、结果及其分析         二叉树是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者

    2024年02月02日
    浏览(29)
  • 二叉树的创建与存储,以及遍历

    树是n个节点的集合,在任何一棵非空树中有且仅有一个被称为根的结点,当n1时,其余结点可以被分为m个互不相交的子集,其中每个子集又是一棵树,称其为根的子树 结点:一个数据元素以及若干指向其子树的分支 结点的度:结点所拥有的子树的棵树 树的度:树中各个结点

    2024年02月05日
    浏览(42)
  • 二叉树OJ题进阶(二叉树层序遍历、根据二叉树创建字符串、判断完全二叉树、二叉树的构建及遍历、二叉树的最近公共祖先(2种))

    1.思路 用队列写: 1.从上到下,从左到右的顺序 2.非递归的方法:使用队列来完成 3.cur充当根结点,当cur不为空的时候,cur进入队列,队列不为空,cur弹出队列打印 4.如果cur的左边不为空,左边进队,右边不为空,右边进队 5.此时队列不为空,弹出队头(也就是cur的左边)打

    2024年02月05日
    浏览(31)
  • 【数据结构】二叉树的创建和遍历(先序、中序、后序)

    最近一段时间学习了数据结构中二叉树的基本操作,包括二叉树的结构、二叉树的创建、递归先序中序后序遍历、非递归遍历等,想着把二叉树的相关知识和自己的见解放到网上来让网友看看是否正确,想和网友一起共同交流。 先了解一下二叉树的三个基本性质: 性质1:在

    2024年02月04日
    浏览(35)
  • 数据结构——二叉树的创建与遍历(链式存储结构)

    二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。以下是对链式存

    2024年02月05日
    浏览(42)
  • 二叉树的层次遍历(C语言)

    二叉树是n(n=0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树组。 先序遍历 中序遍历    后序遍历  层次遍历     一、头文件   二、二叉树的结构   三、队列的结构   四、队列的初始化

    2024年02月07日
    浏览(30)
  • 按照前序遍历创建二叉树及树的四种遍历方式

    一.二叉树的介绍         二叉树的特点是二叉树的每个结点的度都不大于2,可以视为每个结点都有左孩子和右孩子。故二叉树结点的数据结构为   二.二叉树的特点     1.设根结点所在的层数为第1层,则第i层最多有个结点。     2.深度为k的二叉树最多有个结点。    

    2024年02月04日
    浏览(31)
  • 【C语言 数据结构】二叉树的遍历

    所谓先序遍历二叉树,指的是从根结点出发,按照以下步骤访问二叉树的每个结点: 访问当前结点; 进入当前结点的左子树,以同样的步骤遍历左子树中的结点; 遍历完当前结点的左子树后,再进入它的右子树,以同样的步骤遍历右子树中的结点; 先序遍历这棵二叉树的过

    2024年02月04日
    浏览(33)
  • 【数据结构】二叉树的创建和四种遍历(附带详细注释)

    《数据结构系列首页》是数据结构系列文章的首页,其中会 逐步更新 各种数据结构的实现,有兴趣的选手可以一看。 首页中不仅有各种数据结构的实现,还有学习数据结构 必备的基础知识 ,如果有选手觉得自己的基础不太牢固,可以先将搞定基础知识,之后再攻克数据结

    2024年02月05日
    浏览(58)
  • 【C语言题解】 | 144. 二叉树的前序遍历

    提示: 树中节点数目在范围 [0, 100] 内 函数原型: 首先先观察一下这个函数原型, TreeNode* root 为形参,传入根节点, int* returnSize 为形参,在函数调用时用于返回改题目所求数组的长度,因为由于C语言的局限,只能返回一个参数,所以采用这种通过传入指针的形参,来改变

    2024年01月18日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包