数据结构与算法(C++)——二叉树的遍历

本文介绍了二叉树的前序、中序、后序和层次遍历,分别给出了递归和非递归的C++代码实现。前序遍历顺序为根-左-右,中序遍历顺序为左-根-右,后序遍历顺序为左-右-根,层次遍历顺序为从上到下、从左到右。
摘要由CSDN通过智能技术生成

二叉树的遍历

二叉树是一种重要的数据结构。遍历方式有前序遍历、中序遍历、后续遍历以及层次遍历。对于前序、中序和后续遍历,采用递归的思想代码实现起来简单且容易理解,非递归实现需要用到辅助栈。层次遍历需要用到辅助队列来实现。

一、前序遍历

前序遍历是按照:根结点-左结点-有结点   顺序访问。

递归代码实现:

	/*二叉树前序遍历递归实现*/
	void preOrder(BinaryTreeNode* Root)
	{
		if (Root != NULL)
		{
			cout << Root->val << " ";
			preOrder(Root->left);
			preOrder(Root->right);
		}
	}


非递归方法实现:

对于任一结点p:

(1)访问结点P,并将结点P入栈;

(2)判断结点P的左结点是否为空,若为空,则取栈顶元素并进行出栈操作,并将栈顶元素的右结点置为当前P,重复(1);若不为空,则将P的左结点置为当前P;

(3)直到P为NULL并且栈为空,则遍历结束。

代码实现:

	/*二叉树前序遍历非递归实现1*/
	void preOrder_1(BinaryTreeNode* Root)
	{
		if (Root == NULL)
			return;
		stack<BinaryTreeNode*> nodeStack;
		nodeStack.push(Root);
		while (!nodeStack.empty())
		{
			BinaryTreeNode* p = nodeStack.top();
			nodeStack.pop();
			cout << p->val << " ";
			if (p->right != NULL)
				nodeStack.push(p->right);
			if (p->left != NULL)
				nodeStack.push(p->left);
		}
	}


	/*二叉树前序遍历非递归实现2*/
	void preOrder_2(BinaryTreeNode* Root)
	{
		if (Root == NULL)
			return;
		stack<BinaryTreeNode*> nodeStack;
		BinaryTreeNode* p = Root;
		while (p != NULL || !nodeStack.empty())
		{
			while (p != NULL)
			{
				cout << p->val << " ";
				nodeStack.push(p);
				p = p->left;
			}
			if (!nodeStack.empty())
			{
				p = nodeStack.top();
				nodeStack.pop();
				p = p->right;
			}
		}
	}


二、中序遍历

中序遍历是按照:左结点-根结点-右结点  顺序访问。

递归代码实现:

	/*二叉树中序遍历递归实现*/
	void inOrder(BinaryTreeNode* Root)
	{
		if (Root != NULL)
		{
			inOrder(Root->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值