首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

資料結構與演算法 C# 實作系列:廣義樹補充─ 節點鍵值、度數、空樹判斷與物件比較

     編輯:關於C語言

前言

補充廣義樹節點的核心屬性實作細節,包含 Key、Degree、IsEmpty/IsLeaf 判斷邏輯,以及正確覆寫 Equals/GetHashCode 確保集合行為正確。

屬性實作


public override object Key => _key;
public override uint Degree => _degree;

public override bool IsEmpty() => false; // 實例化即非空
public override bool IsLeaf() => _degree == 0; // 無子樹即葉子

Equals 深度比較


public override bool Equals(object obj)
{
    if (!base.Equals(obj)) return false; // 基類型別檢查
    var other = (GeneralTree)obj;

    // 比較子樹集合 (參考型別)
    if (!Object.Equals(_subTrees, other._subTrees)) return false;

    // 比較值型別成員 (Key, Degree 等)
    return true;
}

public override int GetHashCode()
{
    int hash = 17;
    hash = hash * 23 + (_key?.GetHashCode() ?? 0);
    hash = hash * 23 + _subTrees.GetHashCode();
    return hash;
}

設計提醒

  • IsEmpty 恆為 false:廣義樹節點本身即存在,空樹通常用 null 或專用單例表示。
  • Equals 需遞迴比較子樹結構:上例簡化為參考比較,實際應遞迴比較每個子樹內容,並防循環參考。
  • GetHashCode 結合關鍵欄位:包含 Key 與子樹集合雜湊,確保相等物件雜湊碼相同。

結語

結語

正確實作屬性判斷與物件相等比較,是廣義樹能正常運作於 HashSet、Dictionary 等集合、並支援序列化/深度複製的前提。

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