递归与非递归方式寻找二叉树中某个节点的值

递归与非递归方式寻找二叉树中某个节点的值

题目:在二叉树中查询value值,如果存在返回节点的地址,否则返回NULL。
1.非递归的方法

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;
}

思路:首先访问一个根节点,当这个节点为空时,返回NULL。否则将根节点入栈,然后再栈中进行操作,只要栈不为空,就获取栈顶的元素,再将栈顶元素出栈,如果这个出栈的元素等于要查找的value值,就输出该元素的地址,否则就进入下一步,访问它的左右两个子树,只要它的左右子树,不为空,就将左右子树入栈再进行上述的循环操作。
2.递归的方法

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;
	}
}

思路:如果该节点为空,或者该节点的值等于value,直接返回该结点的地址,否则就去找它的左孩子,找不到就找它的右孩子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值