知识点8:二叉树根据节点的val值返回对应的节点

非递归的方式,用栈实现

BTree* return_by_val(int val,BTree *root) {
	stack<BTree*> s;
	BTree* cur = root;
	while (cur!=nullptr||!s.empty()) {
		while (cur!=nullptr)
		{
			s.push(cur);
			cur = cur->left;
		}
		if (cur==nullptr) {
			cur = s.top();
			if (cur->val==val) {
				return cur;
			}
			s.pop();
		}
		cur = cur->right;
	}
}

root为根节点,根据形参的val值来找到对应val的节点并返回该节点
非递归的方式虽然写起来麻烦,但是坑少

递归的方式(有一处坑)

	//递归方式
	static BTree* temp = nullptr;  //static非常重要
	if (root) {
		if (root->val == val) {
			temp = root;
		}
		return_by_val(val, root->left);
		return_by_val(val,root->right);
	}
	return temp;

刚开始写非递归的方式一直报错的原因是因为第一句话。
如果不加static的话,每执行一次递归操作,都要重新创建一个temp节点,导致最后返回temp节点为空
这是一个知识点,若要用递归时一定要记住!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值