二叉树的查询

我们以下面这颗二叉树举例,来实现二叉树查询的递归代码和非递归代码。

在这里插入图片描述
比如说要查找B这个节点,我们就返回B这个节点的地址,用非递归实现我们可以借助非递归的先序、中序或者后序遍历来解决,这里借助的是先序遍历。给出代码:

BtNode* Findvalue(BtNode* ptr, ElemType val)
{
	if (ptr == NULL)
	{
		return NULL;
	}
	stack<BtNode*> st;
	st.push(ptr);
	while (!st.empty())
	{
		ptr = st.top();
		st.pop();
		if (ptr->data == val)
		{
			return ptr;
		}
		if (ptr->leftchild != NULL)
		{
			st.push(ptr->leftchild);
		}
		if (ptr->rightchild != NULL)
		{
			st.push(ptr->rightchild);
		}
	}
	return NULL;
}

从运行结果来看,我们找到了节点的数据域为B的这个节点:

在这里插入图片描述
除了用非递归查询以外,我们也可以用递归的思想来查询二叉树的节点:

BtNode* FindValue(BtNode* ptr,ElemType val)
{
	if (ptr == NULL || ptr->data == val)
	{
		return ptr;
	}
	else
	{
		BtNode* p = FindValue(ptr->leftchild, val);
		if (nullptr == p)
		{
			p = FindValue(ptr->rightchild, val);
		}
		return p;
	}
}

同样的也能得到和上面一样的运行结果。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页