C++二叉树的基本用法

本文详细介绍了如何使用C++实现二叉树的数据结构,并提供了构建、遍历二叉树的具体代码实例。包括前序、中序、后序及层序遍历方法,通过实例演示了各种遍历方式的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS.更多数据结构知识详见:

八大数据结构

C++二叉树的数据结构

struct TreeNode
{
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int val) :val(val), left(nullptr), right(nullptr) {}
};

构建二叉树

//输入序列:A B D G # # H # # #  C E # I # # F # #
//构建二叉树
void CreateBinaryTree(TreeNode* &root)
{
	char ch;
	cin >> ch;
	if (ch == '#')
	{
		root = nullptr;
	}
	else
	{
		root = new TreeNode(ch);
		CreateBinaryTree(root->left);
		CreateBinaryTree(root->right);
	}
}

前序遍历

在这里插入图片描述

//前序遍历
void PreOrderTraverse(TreeNode* root)
{
	if (root == nullptr)
		return;
	cout << root->val << "	";
	PreOrderTraverse(root->left);
	PreOrderTraverse(root->right);
}

前序遍历的迭代版本

中序遍历

在这里插入图片描述

//中序遍历
void InOrderTraverse(TreeNode* root)
{
	if (root == nullptr)
		return;
	InOrderTraverse(root->left);
	cout << root->val << "	";
	InOrderTraverse(root->right);
}

中序遍历的迭代版本

后序遍历

在这里插入图片描述

//后序遍历
void LastOrderTraverse(TreeNode* root)
{
	if (root == nullptr)
		return;
	LastOrderTraverse(root->left);
	LastOrderTraverse(root->right);
	cout << root->val << "	";
}

后序遍历迭代版本

层序遍历

在这里插入图片描述

//层序遍历
void FloorOrderTraverse(TreeNode *root)
{
	if (root == nullptr)
		return;
	queue<TreeNode*> que;
	que.push(root);
	while (!que.empty())
	{
		TreeNode* cur = que.front();
		que.pop();
		cout << cur->val << "	";
		if (cur->left)
			que.push(cur->left);
		if (cur->right)
			que.push(cur->right);
	}
}

测试

//测试
void testBinaryTree()
{
	TreeNode* root = nullptr;
	CreateBinaryTree(root);

	cout << "输出前序遍历的结果 :" << endl;
	PreOrderTraverse(root);

	cout << endl << endl;

	cout << "输出中序遍历的结果 :" << endl;
	InOrderTraverse(root);

	cout << endl << endl;

	cout << "输出后序遍历的结果 :" << endl;
	LastOrderTraverse(root);

	cout << endl << endl;

	cout << "输出层序遍历的结果 :" << endl;
	FloorOrderTraverse(root);

	cout << endl << endl;
}

运行结果

在这里插入图片描述

二叉树的应用

1.反转二叉树

2.二叉树的右视图

3.前序和中序、中序和后序构建二叉树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值