二叉树的C语言实现及遍历

本文介绍了二叉树的基本概念,强调了递归思想在处理二叉树问题中的重要性。通过建立二叉树节点,讨论了如何用数组或链式结构表示二叉树,并重点讲述了前序、中序和后序遍历的递归实现方法。递归虽高效但可能导致内存问题,需要谨慎使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

树是一种十分重要的基础数据结构。很多实际问题都会抽象成树来解决。而这篇文章要讲的二叉树则是树中最基本又很重要的一种特殊树。它只的是每个节点的度不大于2的树。
在这里插入图片描述
基于二叉树还有很多衍生的树。查找树,红黑树,平衡树等等等等。

基础思路

二叉树可以很形象的看做是一个递归的产物。所以二叉树的问题,基本都可以用递归来解决。无论一颗二叉树是什么样子的。他都可以看做三部分:本节点,左子树,右子树。
左子树也可以看成本节点,左子树,右子树。这样的结构。
在这里插入图片描述
就像图片上这样。所以一个树的节点需要三部分。保存本节点的数据。指向左节点(左子树),指向右节点(右子树)。当不存在左节点(左子树)或者右节点(右子树)时,则指向空就好。
于是我们就可以构造一个二叉树所需要的节点。

typedef struct TreeNode
{
   
	BTtype _val;
	struct TreeNode* _left;
	struct TreeNode* _right;
}BinaryTreeNode;

当然,根据需要一个节点也可以保存很多数据,比如一个学生的姓名学号生日电话等等等。

二叉树的建立

二叉树有很多种搭建方法。在不同的场景可以有用不同的方法。虽然二叉树是一种非线性的结构。我们依然可以使用数组来保存。
在这里插入图片描述

如果将根节点看做第零个节点的话,他的左孩子节点的下标等于父节点的下标的二倍加一,右孩子节点的下标等于父节点的下标的二倍加二。这样比较简单我就不贴代码了。
我们还是利用在上面建的节点。利用链式构成二叉树。我们确定一个根节点。然后让比根节点小的去左节点,比根节点大的去右节点。这样构成的树是一颗二叉查找树。当我们用中序遍历时,遍历结果就是升序的。


BinaryTreeNode* InitTree(BTtype *a,int nums)  //建树
{
   
	BinaryTreeNode* root;
	root = NULL;
	BinaryTreeNode* cur,*prev;
	for (int i = 0; i < nums; ++i)
	{
   
		BinaryTreeNode* newnode = (BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
		newnode->_val = a[i];
		newnode
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值