二叉树深度优先遍历

分为三种方式:
前序遍历,中序遍历,后序遍历
前序遍历:
先对28的节点进行访问,相当于访问左序,输出28;
之后访问其左孩子16,输出16;
再访问16的左孩子13,输出13;
之后访问13的左孩子,没有左孩子;
访问13的中序,不输出;
再访问13的右序,不输出;
再访问16的中序,16有右孩子;
访问16的右孩子,子节点22,输出22的值左序;
再访问22的中序,不输出;
访问22的右序值,不输出;
再访问16的右序,不输出;
再访问28的中序,28有右孩子;
访问28的有孩子30.。。。继续上述操作。
总结:在遍历的时候,先输出当前的值,然后访问左子树,然后访问右子树。
在这里插入图片描述
中序遍历:
中序遍历与前序遍历类似,只是在中序的时候,需要输出值,然后再访问右子树。并且,中序遍历能够将二叉树里的值按照从小到大排序。
示例如下:在这里插入图片描述
后序遍历:
有了上述两种遍历,后序遍历的方式则与之类似,在访问右序的时候,则要输出值
在这里插入图片描述
后续遍历可以用来释放树的内存空间,遍历到一个树后,将节点销毁。

**//前序遍历
	void preorder(Node* node)
	{
		if (node!=NULL)
		{
			std::cout << node->key << std::cout;
			preorder(node->left);
			preorder(node->right);
		}
	}

	//中序遍历
	void inorder(Node* node)
	{
		if (node!=NULL)
		{
			inorder(node->left);
			std::cout << node->key << std::cout;
			inorder(node->right);
		}
	}

	//后序遍历
	void postorder(Node* node)
	{
		postorder(node->left);
		postorder(node->right);
		std::cout << node->key << std::cout;
	}

	//释放树的空间,析构函数
	void destroy(Node* node)
	{
		if (node!=NULL)
		{
			destroy(node->left);
			destroy(node->right);

			delete[] node;
			count--;
		}
	}**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值