尝试验证表达式树中的叶节点

时间:2013-04-25 19:13:05

标签: c++ binary-tree

我做了一个布尔函数来验证表达式树中的叶节点。如果节点是任何运算符,则返回false。否则,它应该返回true。它递归地称自己......这就是我认为问题所在。你有一个布尔函数是递归的吗?这是我的功能

bool validate(tnode* node)
{
  if(node == NULL)
  {
    cout<<"Node is null";       
    return false;
  }
  if(node->left == NULL && node->right==NULL) 
  {
    cout<<node->key<<endl<<endl;
    if(node->key == '+' || '-' || '*' || '/')
        return false;
    else 
        return true;
  }     
  else
        validate(node->left);
        validate(node->right);      
}

它实际上完全打印出我所有叶子节点的值,它们是:a b c d 2 e 3.但是当我在我的main函数中运行它时,它总是返回false。关于为什么的任何想法?

3 个答案:

答案 0 :(得分:2)

 if(node->key == '+' || '-' || '*' || '/')

应该是

if(node->key == '+' || node->key == '-' || node->key == '*' || node->key == '/')

同时

else {
    validate(node->left);
    validate(node->right);   
} //should not miss the parenthesis

您可能应该这样做:

else{
      bool left = validate(node->left);
      bool right = validate(node->right);
      return (left && right);
}   

答案 1 :(得分:0)

您不会将结果存储在任何地方。

validate(node->left);
validate(node->right);   

应该更像

_Bool res = validate(node->left);

然后对结果做点什么。

答案 2 :(得分:0)

它总是返回false的原因是这个表达式:

(node->key == '+' || '-' || '*' || '/')

实际上意味着

(node->key == '+') || ('-' != 0) ...

始终为true,因为-字符的值不为零。

你也不需要把它变成if-else子句,我建议你这样做:

return !(node->key == '+' || node->key == '-'
      || node->key == '*' || node->key == '/');

至于最后一部分,我认为你需要这样做:

else
    return validate(node->left) && validate(node->right);