[英]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.