所以我理解它遞回呼叫該方法。但是我不確定它會如何輸出較大的節點(節點的右側)。謝謝!
void InOrderSmallestToLargest(BST* root)
{
if(root==NULL)
{
return;
}
// Ordered from smallest to largest
InOrderSmallestToLargest (root->left);
cout << root->data<<'\n';
InOrderSmallestToLargest (root->right);
}
uj5u.com熱心網友回復:
您發布的代碼描述了一種稱為 pre-order 的樹遍歷方案(請參閱https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)
cout 將在遍歷所有左側節點后列印當前節點值(直到重新獲得葉子)并在右側節點上繼續遍歷,然后列印它們的值
uj5u.com熱心網友回復:
在二叉搜索樹 (BST) 中,此規則適用于所有節點:
- 節點左子樹中的所有值(如果有)都小于或等于節點自身的值
- 節點右子樹中的所有值(如果有)都大于或等于節點自身的值
遞回函式使用此屬性。原因是為了按順序輸出值,根的左子樹中的所有值都應該列在它自己的值之前,而根的右子樹中的所有值都應該列在它自己的值之后。
如果我們在左子樹和右子樹中應用相同的推理,那么很明顯我們永遠不會以錯誤的順序輸出值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383320.html
