二叉树的链式存储与线索二叉树-数据结构(14)

本文介绍了一种使用先序遍历字符串创建二叉树的方法,并通过递归实现了二叉树的创建过程。此外,还提供了一种二叉树的打印方式,能够清晰地展示出二叉树的结构。

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

一、二叉树的存储结构

 //二叉树 //二叉树的链式存储
 typedef struct BiTNode{
	 TElemType data;
	 struct BiTNode *lchild, *rchild;//左右孩子的节点
 }BiTNode, *BiTree;


二、二叉树的创建和打印

int strIndex = 0;
Status CreateBiTree(BiTree &T, char *preStr){
	//递归创建二叉树 先序遍历的字符串 index索引到的字符串序列
	int ch = preStr[strIndex++];
	if (ch == '#')
	{
		//当前结点为空节点
		T = NULL;
	}
	else
	{
		//当前结点不为空
		T = (BiTree)malloc(sizeof(BiTNode));
		if (T == NULL)
		{
			printf("空间分配失败");
			return OVERFLOW;
		}
		T->data = ch;
		CreateBiTree(T->lchild,preStr);
		CreateBiTree(T->rchild,preStr);
	}
	return OK;

}

//打印
void PrintTree_L(BiTree &T, int n){
	if (T == NULL)return;
	PrintTree_L(T->rchild, n + 3);
	for (int i = 0; i < n; i++){
		printf(" ");
	}
	printf("%c\n", T->data);
	PrintTree_L(T->lchild, n + 3);
	return;
}

Status PrintElement(TElemType e){
	printf("%c",e);
	return OK;
}
void main(){
	char * preStr = "ABC##DE#G##F###";//先序遍历字符串
	BiTree tree;
	CreateBiTree(tree,preStr);
	PrintTree_L(tree,0);
}
输出:
A
         F
      D
            G
         E
   B
      C
请按任意键继续. . .



三、二叉树的改进,线索二叉树

在一棵二叉树中有n个结点就有n+1个空链域,为了好好利用这些空间,于是在二叉树上进行的改进,空链域中,如果是左孩子,则指示前驱,否则就是后继。有了这种改进主要还是在先序遍历中起到了很好的效率。至于如何构造这棵树,我也不会,这里就不误人子弟了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值