检查树节点等于值

时间:2015-02-03 22:28:13

标签: c++ recursion tree

我正在尝试为任意二叉树编写递归函数,该树采用值和叶节点,并检查叶节点是否具有该值。这大致就是我现在所拥有的。

bool tree_eq(value, N* node){
  if (node == nullptr){
    return false;
    }
  else{
    if node->value == value{
      return true;
    }
    else{
      return tree_eq(value, N->left);
      return tree_eq(value, N->right);
    }

我知道我不能回归两件事,那就是我正在努力解决的问题。如果给出根而不是叶子,我如何递归检查右侧和左侧?谢谢

2 个答案:

答案 0 :(得分:2)

您需要知道节点是在左侧还是在右侧(与侧面无关),因此您可以说:

 ...
 else {
    return (tree_eq(value,N->left) || tree_eq(value,N->right) );
 }

这将导致深度优先搜索,其中始终考虑最左边的节点分支。

答案 1 :(得分:2)

当树未分类时,请从

更改结束else子句
 return tree_eq(value, N->left);
 return tree_eq(value, N->right);

并尝试'或'这两个结果,如

 return (tree_eq(value, N->left) ||
         tree_eq(value, N->right));

如果你的树被排序,你只需要向下一侧或另一侧,而不是两者。

请注意'||'如果在左分支中找到,则不会调用右分支。