C语言数据结构代码——二叉树

Head.H

typedef struct _tnode
{
	int ele;
	struct _tnode *ltree;
	struct _tnode *rtree;
}TNode, *tnode;

tnode InitTree(int size);
void PrintAimNode(tnode T, int level);
void PrintTreeStructure(tnode T);
void PrintTree_A(tnode T);
void PrintTree_B(tnode T);
void PrintTree_C(tnode T);
int GetTreeDeepth(tnode T);
tnode FindTreeAimVal(tnode T, int aimval);
void FindTreeAimNode(tnode T, int aimval, tnode aimaddress);

 

 

Function.C

//创建树
tnode InitTree(int size)
{
	if (size == 0)
	{
		return NULL;
	}

	tnode T = (tnode)malloc(sizeof(TNode));
	T->ele = size;
	T->ltree = InitTree(size - 1);
	T->rtree = InitTree(size - 1);

	return T;
}

//打印树某一层全部节点
void PrintAimNode(tnode T, int level)//打印二叉树某一层的结点所有节点的值
{
	if (T == NULL)
	{
		return;
	}
	else
	{
		if (level == 1)
		{
			printf("%d", T->ele);
		}
		else {
			PrintAimNode(T->ltree, level - 1);
			PrintAimNode(T->rtree, level - 1);
		}
	}
}

//打印二叉树整体结构
void PrintTreeStructure(tnode T)
{
	int i;
	int length = GetTreeDeepth(T);

	for (i = 1; i <= length; i++)
	{
		PrintAimNode(T, i);
		printf("\n");
	}
}

//先序遍历
void PrintTree_A(tnode T)
{
	if (T != NULL)
	{
		printf("%d", T->ele);
		PrintTree_A(T->ltree);
		PrintTree_A(T->rtree);
	}
}

//中序遍历
void PrintTree_B(tnode T)
{
	if (T != NULL)
	{
		PrintTree_A(T->ltree);
		printf("%d", T->ele);
		PrintTree_A(T->rtree);
	}
}

//后序遍历
void PrintTree_C(tnode T)
{
	if (T != NULL)
	{
		PrintTree_A(T->ltree);
		PrintTree_A(T->rtree);
		printf("%d", T->ele);
	}
}

//测深度
int GetTreeDeepth(tnode T)
{
	int h1, h2;

	if (T == NULL)
	{
		return 0;
	}

	h1 = GetTreeDeepth(T->ltree);
	h2 = GetTreeDeepth(T->rtree);

	if (h1 > h2)
	{
		return(h1 + 1);
	}
	else
	{
		return(h2 + 1);
	}
}

//查找目标值对应的地址
tnode FindTreeAimVal(tnode T, int aimval)
{
	if (T != NULL)
	{
		if (T->ele == aimval)
		{
			return T;
		}
		FindTreeAimVal(T->ltree, aimval);
		FindTreeAimVal(T->rtree, aimval);
	}

}

//不好用
void FindTreeAimNode(tnode T, int aimval, tnode aimaddress)
{
	tnode tempaddress;
	tempaddress = FindTreeAimVal(T, aimval);

	if (tempaddress != NULL)
	{
		aimaddress = tempaddress;
	}
	else
	{
		printf("Can not find the val!!!");
	}
}

 

 

Main.C

void main(void)
{
	tnode T = InitTree(4);

	PrintTree_A(T);
	printf("\n");
	PrintTree_B(T);
	printf("\n");
	PrintTree_C(T);
	printf("\n");

	printf("%d \n", GetTreeDeepth(T));

	/*tnode aimaddress = (tnode*)malloc(sizeof(tnode));
	aimaddress = FindTreeAimVal(T, 1);
	printf("%d\n", aimaddress->ele);*/

	tnode aimaddress = FindTreeAimVal(T, 3);

	if (aimaddress != NULL)
	{
		printf("find the val: %d\n", aimaddress->ele);
	}
	else
	{
		printf("cannot find\n");
	}

	PrintTreeStructure(T);


	printf("\n");
	system("pause");
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值