静态建立二叉树 数据结构 C语言实现

下列代码要创建一个上图所示的二叉树(静态建立,如果要实现动态建立要用到递归,那个我还没学)

我们下面要建立的二叉树比较低级,就一个初始化和一个先序遍历的功能。

以后我学会的其他二叉树的操作一定会以一个萌新的视角分享自己的理解给大家,希望大佬们多多包涵。

先序遍历是先访问根节点然后访问左子树和右子树的一种二叉树的遍历方式。

另外二叉树还有另外两种遍历方式,中序遍历和后序遍历。

中序遍历是先访问左子树再访问根节点再访问右子树。

后续遍历是先访问左子树再访问右子树再访问根节点。

要确定一棵二叉树长什么亚子,我们只需要它的先序遍历和中序遍历或者后序遍历和中序遍历的结果就行了。

下面是代码:

1.每个结点包括左指针域(存放其左子树的根节点地址)和右指针域(存放其右子树的根节点地址)和它的数据域(存放有效数据)。

2.叶结点(指的是没有左子树和右子树的结点)的指针域要指向NULL。其他没有子树的结点的相对应的指针域也是同理。

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

typedef struct Treeknot//这是我们树的结点 
{
	char data;
	struct Treeknot* pleft;
	struct Treeknot* pright;
 }tknot,*ptknot;

ptknot init_(void);//初始化 

void pretraverse(ptknot); //遍历 

int main(void)
{
	ptknot pt;
	pt = init_();//括号里面不要加void不然会报错 
	pretraverse(pt);
	return 0;
}

ptknot init_(void)
{
	ptknot pA = (ptknot)malloc(sizeof(tknot));//以此建立七个结点 
	ptknot pB = (ptknot)malloc(sizeof(tknot));
	ptknot pC = (ptknot)malloc(sizeof(tknot));
	ptknot pD = (ptknot)malloc(sizeof(tknot));
	ptknot pE = (ptknot)malloc(sizeof(tknot));
	ptknot pF = (ptknot)malloc(sizeof(tknot));
	ptknot pG = (ptknot)malloc(sizeof(tknot));
	pA->data = 'A';
	pB->data = 'B';
	pC->data = 'C';
	pD->data = 'D';
	pE->data = 'E';
	pF->data = 'F';
	pG->data = 'G';
	pA->pleft = pB;//将各个结点按照上图所示依次相连。 
	pB->pleft = pD;
	pB->pright = NULL;
	pD->pleft = pD->pright = NULL;
	pA->pright = pC;
	pC->pleft = NULL;
	pC->pright = pE;
	pE->pleft = pF;
	pE->pright = pG;
	pF->pleft = pF->pright = NULL;
	pG->pleft = pG->pright = NULL;
	return pA;
}

void pretraverse(ptknot p)
{
	if(p != NULL)
	{
		printf("%c\n",p->data);
		pretraverse(p->pleft);
		pretraverse(p->pright);
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值