0
這不是對編碼解決方案或編譯器錯誤的請求。我更傾向於理解某些東西。二進制搜索樹,順序遍歷,步驟3邏輯幫助
我一直在學習C++一段時間,但我仍然在一些新的。我正在關注YouTube上的Paul編程教程以及其他教程。
他已經做了一個youtube視頻的概念,爲了遍歷二叉搜索樹,以及一個YouTube視頻展示了這種遍歷背後的實際編程。
如果有人能幫助我,我不明白步驟3
我的示例程序編譯和工作正常,打印完全按照保羅的一樣。我得到它的工作,並可以複製它/可能反向工程它的目的以外的其他目的,但我想實際理解它,然後繼續前進。
這是保羅的打印功能的代碼
void BinarySearchTree::printInOrderPrivate(node* Ptr)
{
if(root_ptr != NULL)
{
if(Ptr->left_ptr != NULL)
{
printInOrderPrivate(Ptr->left_ptr);
}
cout << Ptr->key <<" ";//Process Node here
if(Ptr->right_ptr != NULL)
{
printInOrderPrivate(Ptr->right_ptr);
}
}
else
{
cout <<"The tree is empty\n";
}
}
我只是不明白它是如何工作邏輯。我會將他的概念視頻鏈接起來,你不需要看它,只要暫停一下,看看他製作的圖表。 https://www.youtube.com/watch?v=pCXgWg5OfhY
在某些節點上,如3,左邊的和右邊的ptr將指向NULL。
注意,該遞歸調用PrintInOrderPrivate(Ptr->Left)
和PrintInOrderPrivate(Ptr->Right)
如果有需要語句PTR的->left
和->right
比NULL以外的值包圍的代碼。
我看到並理解該算法是如何在紙上工作的,但函數如何不會在像3那樣的數字處中斷,其中左和右都是空的?它怎麼知道回去?
即使假設它確實知道要回到包含2的節點,它不應該直接返回到3嗎?
(1)含2節點沒有左指針 (2)印刷值 (3)向右走 (右指回到3再次不應該嗎?這會循環)。
我的意思是,它的工作原理,我看到它在我面前編譯,但我無法圍繞它如何編譯我的頭。我可能甚至無法正確地說出問題,但任何幫助表示讚賞。謝謝你,請原諒你,如果你還在這裏!