2015-12-20 24 views
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再次不應該嗎?這會循環)。

我的意思是,它的工作原理,我看到它在我面前編譯,但我無法圍繞它如何編譯我的頭。我可能甚至無法正確地說出問題,但任何幫助表示讚賞。謝謝你,請原諒你,如果你還在這裏!

回答