试图验证表达式树中的叶节点
trying to validate leaf nodes in expression 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。知道为什么吗?
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);
}
您没有将结果存储在任何地方。
validate(node->left);
validate(node->right);
应该更像
_Bool res = validate(node->left);
然后处理结果
它总是返回false
的原因是:
(node->key == '+' || '-' || '*' || '/')
实际上意味着
(node->key == '+') || ('-' != 0) ...
总是为真,因为-
字符没有零值。
你也不需要把它变成if-else子句,我建议这样做:
return !(node->key == '+' || node->key == '-'
|| node->key == '*' || node->key == '/');
关于最后一部分,我认为你需要这样做:
else
return validate(node->left) && validate(node->right);
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- (C++)分析树以计算返回错误值的简单算术表达式
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 提升精神:解析布尔表达式并简化为规范范式
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 有没有办法访问C++ Boost rtree 中的非叶节点
- 具有最大不同节点的根到叶路径
- 在语法树中的节点上定义的层次结构的表达式模板
- 正则表达式C++如何搜索有效的 Linux 设备节点
- 是否有任何函数可以从 wxtreelistctrl 获取所有选定的叶节点
- 创建一个函数,该函数返回一个新的相同二叉树,并向所有预先存在的叶添加新节点
- 分支和叶节点的独立类
- 试图验证表达式树中的叶节点
- 表达式节点的模板构造函数返回错误的值
- 在二进制搜索树中查找最深级别的左叶节点
- 树表达式-节点设置
- 如何返回一个boost::property_tree的叶节点