struct tnode
{
int val;
struct tnode *left;
struct tnode *right;
};
int search(struct tnode *root, int val)
{
int p = 0;
int q = 0;
if (!root) return 0;
p = search(root->left, val);
if (p == 1) return 1;
if (root->val == val) return 1;
q = search(root->right, val);
if (q == 1) return 1;
}
在搜索树时找不到0
时,我不理解上述代码如何返回val
。
答案 0 :(得分:0)
你有什么非结构化的功能。有四个返回语句和五个可能的返回路径。其中一个返回显式返回零,其他返回显式返回1,因此要么为search
调用root
,要么为第五个隐式返回路径返回零。
在编译器上拨打警告级别,它应该标记并非所有执行路径都返回值。
我建议您重新排列逻辑,以便在函数末尾有一个return语句。
答案 1 :(得分:-1)
在这里,我使用堆栈进行树的迭代顺序遍历。
int find_element(struct node *root,int val){
if(!root) return 0;
std::stack<node*> s;
while(!s.empty() || root){
if(root){
s.push(root);
root=root->left;
}
else
{
root=s.top();
s.pop();
if(root->val==val) return 1;
root=root->right;
}
}
return 0;
}