繁体   English   中英

使用顺序遍历在二叉树中搜索元素

[英]searching an element in binary tree using in order traversal

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

我不了解搜索树时找不到val时上述代码如何返回0

您所拥有的是一个非结构化的函数。 有四个返回语句和五个可能的返回路径。 其中一个返回值显式返回零,其他返回值显式返回1,因此,要么您调用root NULL search ,要么第五个隐式返回路径恰好返回零。

调高编译器的警告级别,它应该已经标记出并非所有执行路径都返回值的事实。

我建议您重新排列逻辑,以便在函数末尾有一个return语句。

在这里,我将堆栈用于树的迭代有序遍历。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM