二叉樹類中 PreOrder 等遍歷方法在 public 和 private 各出現一次:
class BinaryTree {
public:
void PreOrder(); // 無參數
private:
void PreOrder(Node* p); // 帶節點參數
};
| 屬性 | public 無參版 | private 帶參版 |
|---|---|---|
| 呼叫者 | 類外部用戶 | 內部遞歸/自身 |
| 參數 | 無 | 當前子樹根節點 |
| 職責 | 提供統一介面,隱藏根節點細節 | 實作遞歸邏輯 |
| 典型實作 | { PreOrder(root); } | if(p){ visit(p); PreOrder(p->left); PreOrder(p->right); } |
root 存在,也不需傳遞節點指標。// 用戶代碼
tree.PreOrder(); // 呼叫 public 版
// 內部實作
void BinaryTree::PreOrder() { PreOrder(root); } // 轉呼叫 private 版
void BinaryTree::PreOrder(Node* p) { // 遞歸核心
if (p) {
cout << p->data;
PreOrder(p->left);
PreOrder(p->right);
}
}
InOrder、PostOrder、LevelOrder 等均採用相同模式。此為 C++ 經典「介面函數 + 實作函數」慣用語。
