【发布时间】:2019-02-22 06:03:33
【问题描述】:
这是我的代码:
bool BinarySearchTree::CheckIfTreeIsBinary(){
bool isBinary=true;
isBinary=CheckIfTreeIsBinaryPrivate(root); // So if my tree is binary, this function does not return anything
// and isBinary should remain true, but it is false.
return isBinary;
}
bool BinarySearchTree::CheckIfTreeIsBinaryPrivate(nodePtr Ptr){
if(Ptr->left!=NULL){
CheckIfTreeIsBinaryPrivate(Ptr->left);
}
if(Ptr->left!=NULL){
if(Ptr->data<Ptr->left->data)
return false; // possibility 1 to return false
}
if(Ptr->right!=NULL){
if(Ptr->data>Ptr->right->data)
return false; // possibility 2 to return false
}
if(Ptr->right!=NULL){
CheckIfTreeIsBinaryPrivate(Ptr->right);
}
}
在我的函数CheckIfTreeIsBinary 中,我将布尔值isBinary 设置为true 作为默认值。之后,将 isBinary 分配给函数 CheckIfTreeIsBinaryPrivate,如果树是二叉树,它将不返回任何内容。
问题是,如果树是二叉树,函数 CheckIfTreeIsBinaryPrivate 不会返回任何内容,但最终 isBinary 为 false。
【问题讨论】:
-
你没有从
CheckIfTreeIsBinaryPrivate返回任何东西。 -
@juanchopanza - 是的,完全正确。但我希望我的 isBinary 保持真实。这可能吗?
-
似乎您将
BinarySearchTree类成员变量与CheckIfTreeIsBinary函数混淆了。isBinary变量只会在CheckIfTreeIsBinaryPrivate返回时更改。如果函数指定返回类型为bool,则必须返回true或false;不返回任何东西不是您应该做的事情(我认为这是“未定义的行为”)。考虑写下你想要做什么,然后你打算如何去做。查看它是否与您的代码实际执行的操作相匹配(例如,定义需要满足哪些条件,这意味着它是一棵二叉树)。 -
“问题是函数 CheckIfTreeIsBinaryPrivate 没有返回任何东西” ...是的,这就是问题所在,只要确保在每条路径上都返回就可以了。不太清楚问题是什么,因为您似乎已经知道答案了
标签: c++ recursion binary-tree