我正在尝试为任意二叉树编写递归函数,该树采用值和叶节点,并检查叶节点是否具有该值。这大致就是我现在所拥有的。
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);
}
我知道我不能回归两件事,那就是我正在努力解决的问题。如果给出根而不是叶子,我如何递归检查右侧和左侧?谢谢
答案 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));
如果你的树被排序,你只需要向下一侧或另一侧,而不是两者。
请注意'||'如果在左分支中找到,则不会调用右分支。