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

前言

树是一种十分重要的基础数据结构。很多实际问题都会抽象成树来解决。而这篇文章要讲的二叉树则是树中最基本又很重要的一种特殊树。它只的是每个节点的度不大于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))
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值