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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用顺序遍历搜索二叉树中的元素相关的知识,希望对你有一定的参考价值。

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

答案

你有什么非结构化的功能。有四个返回语句和五个可能的返回路径。其中一个返回显式返回零,其他返回显式返回1,因此要么为search调用root为NULL,要么第五个隐式返回路径恰好返回零。

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

我建议你重新安排你的逻辑,这样在函数的末尾有一个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;
}

以上是关于使用顺序遍历搜索二叉树中的元素的主要内容,如果未能解决你的问题,请参考以下文章

二叉树层次遍历(包含C语言实现代码)

按照数组顺序插入到二叉树中

树相关

JS中的二叉树遍历

二叉树顺序存储和遍历

二叉树二叉搜索树中的众数(leetcode501)