В C# можно использовать класс Hashtable для создания хеш-таблицы, где ключами будут узлы дерева, а значениями будут хешированные значения этих узлов.
Для начала, нам понадобится определить класс узла дерева. Предположим, что у нас есть класс Node с полем Value, представляющим значение узла, и полями Left и Right для указания на левого и правого потомков соответственно. Класс Node также должен иметь метод GetHashCode(), который будет возвращать хеш-код для данного узла дерева.
Внутри метода GetHashCode() мы можем использовать класс HashCode для вычисления хеш-кода узла. Например, мы можем объединить хеш-коды значений полей Value, Left и Right с помощью метода HashCode.Combine():
public class Node { public int Value { get; set; } public Node Left { get; set; } public Node Right { get; set; } public override int GetHashCode() { return HashCode.Combine(Value, Left?.GetHashCode(), Right?.GetHashCode()); } }
Теперь мы можем создать экземпляр Hashtable и добавить в нее узлы дерева. Ключом будет сам узел, а значением - его хеш-код:
Hashtable hashtable = new Hashtable(); Node node1 = new Node { Value = 1 }; Node node2 = new Node { Value = 2 }; Node node3 = new Node { Value = 3 }; hashtable.Add(node1, node1.GetHashCode()); hashtable.Add(node2, node2.GetHashCode()); hashtable.Add(node3, node3.GetHashCode());
Теперь, при необходимости, мы можем получить хеш-код узла и получить его значение из хеш-таблицы:
int hashCode = node1.GetHashCode(); int value = (int)hashtable[node1];
Таким образом, мы можем хешировать узлы дерева в хеш-таблице, используя их собственные методы GetHashCode(). Это обеспечивает эффективный способ хранения и поиска узлов дерева по их хеш-кодам.