赞
踩
非递归的方式,用栈实现
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节点为空
这是一个知识点,若要用递归时一定要记住!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。