【数据结构】二叉树的创建和遍历

本文介绍了二叉树的基本结构定义,包括树节点结构体和树结构体的定义,并详细解释了如何通过递归方式使用前序遍历来构建二叉树及遍历过程。此外还介绍了前序遍历的具体实现。

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

struct biTreeNode
{
	char data;
	biTreeNode *lchild;
	biTreeNode *rchild;
};

typedef biTreeNode* biNodePtr;

struct biTree
{
	biTreeNode *head;
};

结构定义,定义了树节点的结构体,以及树的结构体。

void init_biTree(biTree *mytree);//二叉树的初始化
void makeTree_preoder(biNodePtr *myNode);//前序生成树
void PreOrderTraverse(biNodePtr myNode);//前序遍历树
void init_biTree(biTree *mytree)
{
	mytree->head = NULL;
}
void makeTree_preoder(biNodePtr *myNode)
{
	char data;
	cin >> data;

	if (data == '#')
	{
		*myNode = NULL;
		return;
	}
	else
	{
		biTreeNode * s = (biTreeNode *)malloc(sizeof(biTreeNode));
		s->data = data;
		*myNode = s;
		makeTree_preoder(&(*myNode)->lchild);
		makeTree_preoder(&(*myNode)->rchild);
		return;
	}
}

前驱生成树,其实是个递归。每次生成,其实都在做同一件事情,即如果输入#号,就把指针赋值为空,否则就申请一个节点,存入数据后的地址赋值给当前的树节点指针,并且对该节点的左右孩子做以上的这些事情。

值得注意的是,形参应该是指针的指针。因为我们需要对指针赋值,如果形参只是传入指针的话,赋值的指针其实是函数创建的临时变量,会被系统回收。这点非常重要。


void PreOrderTraverse(biNodePtr myNode)
{
	if (myNode == NULL)
	{
		return;
	}
	else
	{
		cout << myNode->data << " ";
		PreOrderTraverse(myNode->lchild);
		PreOrderTraverse(myNode->rchild);
	}
}
树的前序遍历也是在对每个节点做同样的事情:如果节点为空,就返回,如果不为空,输出它的值,并且对左右孩子做相同的事情。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值