用地图实现树

Implemetning Tree with Map

我有一个像这样的二叉树 -

            1
           / \
          3   5  
             / \  
            7   9  

现在我正在尝试使用 HashTable 表示树。所以我创建了一个 HashTable binaryTree -

HashTable binaryTree = new HashTable<Integer, Intgeger>();  

然后我尝试将项目添加到 binaryTree。我希望 1 作为 binaryTree 的键,它的所有子项(例如 - 3 和 5)作为它的值。所以我想把 -

binaryTree.put(1, 3);
binaryTree.put(1, 5);   

因为key 1有2个value,所以第二个没有插入到HashTable - binaryTree中?

如何将 3 和 5 同时添加到 binaryTree? 还是有更好的数据结构来做到这一点?

提前致谢?

您似乎在尝试 "fold" 邻接列表到单个散列 table 中。这是可能的,但您需要将元素的类型更改为能够容纳两个整数的类型。

最常见的方法是使用 TreeNode class:

class TreeNode {
    private final int left;
    private final int right;
    public int getLeft() { return left; }
    public int getRight() { return left; }
    TreeNode(int l, int r) { left = l; right = r; }
}

HashTable<Integer,TreeNode> binaryTree = new HashTable<Integer,TreeNode>();

现在插入看起来像这样:

binaryTree.put(1, new TreeNode(3, 5));

您也可以使用两个 int 的数组而不是自定义 class,但使用这种表示的代码可读性会差:

HashTable<Integer,int[]> binaryTree = new HashTable<Integer,int[]>();
binaryTree.put(1, new int[] { 3, 5 });