再回首,数据结构——树和二叉树的常用算法

本文介绍了二叉树的基本操作,包括二叉树的创建、叶子节点计数的两种方法及在二叉树中查找特定节点的算法实现。适合初学者学习和参考。

       最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。

 

       希望这些能提供给初学者一些参考。


//建立二叉树的二叉链表存储结构 (先序)
void CreateBinTree(BinTree *root)
{
	char c;
	if('#'==(c=getchar()))
		*root=NULL;
	else
	{
		*root=(BTNode*)malloc(sizeof(BTNode));
		(*root)->data=c;
		CreateBinTree(&((*root)->lchild));
		CreateBinTree(&((*root)->rchild));
	}
}

//求二叉树的叶子节点的个数	方法1
int CountLeaf(BinTree root)
{
	int static leaf=0;
	if(root!=NULL)
	{
		CountLeaf(root->lchild);
		if(root->lchild==NULL && root->rchild==NULL)
			++leaf;
		CountLeaf(root->rchild);		
	}
	return leaf;
}

//求二叉树的叶子节点的个数	方法2
int CountLeaf(BinTree root)
{
	if(NULL==root)
		return 0;
	else if(NULL==root->lchild && NULL==root->rchild)
		return 1;
	return (CountLeaf(root->lchild)+CountLeaf(root->rchild));
}

//设计一个算法,在二叉树中求在 先序序列 中处于第k个位置的结点
count=0;
BinTree search(BinTree root, int k)
{
	BinTree p;
	if(root==NULL)
		return NULL;
	else
	{
		if(++count==k)
			return root;
		else
		{
			p=search(root->lchild,k);
			if(p)
				return p;
			p=search(root->rchild,k);
		}
	}
}

//设计一个算法,在二叉树中求在 先序序列 中值为x的结点
BinTree LocateTree(BinTree root, elemtype x)
{
	BinTree p;
	if(NULL==root)
		return NULL;
	else if(x==root->data)
		return root;
	else
	{
		p=LocateTree(root->lchild,x);
		if(p)
			return p;
		p=LocateTree(root->lchild,x);		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值