生成一个二叉树

想看更多

二叉树的简介

 二叉树本身的意义不重要,只学二叉树的话会觉得没什么用,因为他不像栈那样为复杂循环提供了行之有效的解决办法。学习二叉树的目的其实是为了后面的排序树、平衡树、堆等知识做准备。

生成一颗二叉树

生成二叉树的方式大概有两种

第一种是用某种序列+#号(用来代表空指针)

第二种是用中序序列 + 任意一个其他序序列 (前序、后序、层次 ,这种方法不需要用符号去代表空指针)生成

 这里写了个函数,输入层次遍历的序列(空用#去代替),生成一个二叉树并且返回根节点。

/*
用例   
1234567#8####9#####
1234567########
73914#####5#6##
*/
biTree* initBiTree(char* data)
{
	if(NULL == data)
		return NULL;
	int i = 0;
		//生成 数组(树)
	for(i;data[i]!='\0';i++);
	biTree* arry_tree = (biTree*) malloc (sizeof(biTree) *  i);     //c语言中的数组和头指针
	for(i=0;data[i]!='\0';i++)
	{
		if(data[i] == '#')
			arry_tree[i].data = 0;
		else
			arry_tree[i].data = data[i] - '0';
	}
	//操作指针添加关系
	int son_pos = 1;
	int this_pos = 0;
	for(this_pos=0,son_pos=1;son_pos<i;this_pos++,son_pos +=2 )
	{
		if(arry_tree[this_pos].data == 0)
		{
			son_pos -= 2;
		}
		if(arry_tree[son_pos].data != 0)
			arry_tree[this_pos].leftSon = &(arry_tree[son_pos]);
		else
			 arry_tree[this_pos].leftSon = NULL;
		if(arry_tree[son_pos+1].data != 0)
			arry_tree[this_pos].rightSon =&(arry_tree[son_pos+1]);
		else
			arry_tree[this_pos].rightSon = NULL;

	}
	return &(arry_tree[0]);

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值