二叉树操作(2)—— 进阶部分

二叉树进阶操作

  1. 统计度数为1的节点的个数
  2. 叶子节点到根节点的路径
  3. 交换左右节点
  4. 广度优先遍历

广度优先遍历
所谓广度,即是按照树的横向来遍历,遵循按顺序输出,所以引入队列,进行先入先出。(直接用STL容器了,自己写队列操作,不可能,绝对不可能🐶

测试实例:
在这里插入图片描述

int Count_Grade_1(Bitree T)                   //统计度数为1的节点个数
{
	if (T == NULL) return 0;
	else if ((!T->leftchild) && (T->rightchild) || (T->leftchild) && (!T->rightchild))   //只有左节点或只有右节点
		return Count_Grade_1(T->leftchild) + Count_Grade_1(T->rightchild) + 1;
	else return Count_Grade_1(T->leftchild) + Count_Grade_1(T->rightchild);
}

void Leaf_Path_Root(Bitree T, char path[], int pathlen)       //叶子节点到根节点的路径
{
	int i;
	if (T != NULL)
	{
		path[pathlen] = T->val;
		if (!T->leftchild && !T->rightchild)    //叶子节点
		{
			for (i = pathlen; i >= 0; i--)
				cout << path[i] << ' ';
			cout << endl;
		}
		else
		{
			Leaf_Path_Root(T->leftchild, path, pathlen + 1);
			Leaf_Path_Root(T->rightchild, path, pathlen + 1);
		}
	}
}

void Exchage_Node(Bitree T)      //左右节点交换
{
	Bitree Temp;
	if (T != NULL)
	{
		Temp = T->leftchild;
		T->leftchild = T->rightchild;
		T->rightchild = Temp;
		Exchage_Node(T->leftchild);
		Exchage_Node(T->rightchild);
	}
}

void BFS(Bitree T)      //广度优先遍历
{
	queue <BiNode*> nodequeue;
	nodequeue.push(T);
	BiNode* node;
	while (!nodequeue.empty())
	{
		node = nodequeue.front();
		nodequeue.pop();
		cout << node->val << ' ';
		if (node->rightchild)
			nodequeue.push(node->rightchild);
		if (node->leftchild)
			nodequeue.push(node->leftchild);
	}
}

int main()
{
	Bitree T;
	char path[100];
	int pathlen = 0;
	cout << "先序遍历创建树,请输入(以‘#’结束): " << endl;
	Create_Bitree(T);       //创建二叉树
	cout << "度数为1的节点个数:" << Count_Grade_1(T) << endl;
	cout << "叶子节点到根节点的路径:" << endl;
	Leaf_Path_Root(T,path,pathlen);
	Exchage_Node(T);
	cout << "交换节点后先序遍历结果:" << endl;
	PreOrderTraverse(T);    //先序遍历二叉树
	cout << endl;
	cout << "广度优先遍历:" << endl;
	BFS(T);
}

测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值