[英]printing the contents of a Binary Search Tree recursively?
void MovieTree::printMovieInventory(MovieNode* node)
{
if(node)
{
while(node->rightChild!=NULL or node->leftChild!=NULL)
{
std::cout<<"Movie:"<<node->title<<" "<<node->quantity<<std::endl;
if(node->rightChild)
{
printMovieInventory(node->rightChild);
}
if(node->leftChild)
{
printMovieInventory(node->leftChild);
}
}
}
else
{
std::cout<<"No movies in list!"<<std::endl;
}
}
我不确定这个函数是否导致了我的问题,或者它是否是我的添加函数,但我觉得这个逻辑是正确的。 我错过了什么吗?
编辑::我的问题是,它导致无限循环,并且它没有正确打印树的所有相关子项
在函数中使用while
是错误的。 它必须是if
。 否则,该函数永远不会中断while
循环。
FWIW,该功能可以简化为:
void MovieTree::printMovieInventory(MovieNode* node)
{
if(node)
{
std::cout<<"Movie:"<<node->title<<" "<<node->quantity<<std::endl;
printMovieInventory(node->rightChild);
printMovieInventory(node->leftChild);
}
}
除了while
循环的问题之外,这也可能永远不会打印叶节点,因为如果它没有左子节点或右子节点,则不打印节点本身。
while(node->rightChild!=NULL or node->leftChild!=NULL)
{
std::cout<<"Movie:"<<node->title<<" "<<node->quantity<<std::endl;
它应该是
if(node)
print node
if left
recurse left
if right
recurse right
这里的情侣。
从我理解的代码,你试图以预购方式打印。 While循环是不必要的,这是导致无限循环的原因让我们说你有两个节点root和root-> left你的函数将打印root,在root'= root-> right上递归调用函数(不会打印任何这个时间因为root' - > left为NULL而root' - > right为NULL)。 然后函数print(root')返回其调用者print(root)。 这次它不会退出while循环,因为while条件总是正确的,因此无限循环。
你可以简单地做到这一点
Print(root)
cout << root;
if(root->right != NULL)
Print(root->right);
if(root->left != NULL)
Print(root->left);
要显示“No Movies”,只需检查root == NULL,然后再调用此递归函数Print(root);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.