首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 二叉樹類設計:public/private 遍歷方法分離的封裝模式深度解析

     編輯:程式設計疑難解答

現象觀察

二叉樹類中 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); }

為何這樣設計?

  1. 資訊隱藏:用戶不需知道 root 存在,也不需傳遞節點指標。
  2. 介面穩定:內部節點結構變更(如改用智慧指標)不影響外部呼叫。
  3. 遞歸便利:私有版自然支援子樹遞歸,公共版作為入口點。

呼叫鏈路示例

// 用戶代碼
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++ 經典「介面函數 + 實作函數」慣用語。

二叉樹類結構圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved