树的定义及基本操作

本文介绍了树的定义,强调其递归性质,并详细讨论了树的主要操作,如求深度、遍历、插入和删除子树。同时,提到了孩子、兄弟表示法来表示树结构,以及在实现这些操作时需要注意的递归遍历和节点连接。在实现过程中,通过全局变量解决查找问题的局限性被指出,期待更好的解决方案。
摘要由CSDN通过智能技术生成

首先,什么是树呢?
数的定义是递归的:
定义树是满足以下条件的,包含至少一个结点的有限集合:
(1)树中有一个特别指定的结点,称为根,或树根。
(2)其它结点划分成n>=0个不相交的集合T1…Tn ,每个集合又还是一棵树,但称为根的子树。
树的主要操作包括:求树的深度、求给定节点的子节点、兄弟节点、遍历树、插入子树、删除子树等等。因为树的定义本身就是递归的,所以在实际的程序中,很多操作也是通过递归来完成的。
树是如何表示的呢?有一种常用的表示方法,成为孩子、兄弟表示法,对于每个节点,通过孩子指针指向自己的子节点,通过兄弟指针指向自己右边的兄弟。

typedef char ElemType;

//通过第一个孩子和下一个兄弟来确定整个树
typedef struct TNode
{
	ElemType data;
	TNode *firstChild,*nextSibling;
}TNode,*Tree;

//初始化一个节点
Tree initTree(ElemType e)
{
	Tree pT;
	pT = (TNode*)malloc(sizeof(TNode));
	pT->firstChild = NULL;
	pT->nextSibling = NULL;
	pT->data = e;
	return pT;
}

//删除树
void deleteTree(Tree *T)
{
	if(NULL == *T)
		return ;
	
	deleteTree(&(*T)->nextSibling);
	deleteTree(&(*T)->firstChild);
	free(*T);
	*T = NULL;

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值