二叉树,排序二叉树(续)

上一篇文章是讲了一些二叉树的一些知识,本文介绍几个二叉树常用的算法

求树的高:二叉树的高是左子树的高和右子树高的最大值再加上1,所以根据递归的定义很快就能得出来算法实现的伪代码

int blgtreeDepth(BLGTree &bt)
{
	//如果树为空,则返回0结束递归
	if (NULL == bt)
	{
		return 0;
	}
	else
	{
		int depth1 = blgtreeDepth(bt->lchild);	//左子树深度
		int depth2 = blgtreeDepth(bt->rchild);	//右子树深度
		if (depth1 > depth2)
		{
			return depth1 + 1;
		}
		else
		{
			return depth2 + 1;
		}
	}
}


统计树的叶子节点个数:叶子节点是孩子节点都为空的节点,要统计叶子节点的个数,可以在遍历的过程中判断节点的孩子节点是否都为空就可以了,代码如下:

int LeafCount(BLGTree& bt)
{
	int nLeafCount = 0;	//叶子节点个数
	if (bt != NULL)
	{
		LeafCount(bt->lchild);
		LeafCount(bt->rchild);
		if (bt->lchild == NULL && bt->rchild == NULL)
		{
			nLeafCount ++;
		}
	}
	return nLeafCount;
}


树的层次遍历:树的层次遍历树指从根节点开始遍历,然后每一层都是从左到右的顺序就行遍历,这样就完成了层次遍历,在遍历过程中用队列实现,具体操作入下:

1.队列Q初始化;

2. 如果二叉树非空,将根指针入队;

3.  循环直到队列Q为空

      3.1 q=队列Q的队头元素出队;

      3.2 访问结点q的数据域;

      3.3 若结点q存在左孩子,则将左孩子指针入队;

      3.4 若结点q存在右孩子,则将右孩子指针入队;

具体代码如下,队列用的STL中的

void levelOrder(BLGTree &bt)
{
	deque<BLGNode *> nodeQueue;
	if (bt != NULL)
	{
		nodeQueue.push_back(bt);
		while (!nodeQueue.empty())
		{
			BLGNode* queueHead = nodeQueue.at(0);
			printf("%d\t",queueHead->data);
			nodeQueue.pop_front();
			if (queueHead->lchild)
			{
				nodeQueue.push_back(queueHead->lchild);
			}
			if (queueHead->rchild)
			{
				nodeQueue.push_back(queueHead->rchild);
			}
		}
	}
}


以上就是一些比较简单的算法,还希望大家可以补充补充!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值