用Map实现树

时间:2015-03-10 18:46:36

标签: java algorithm data-structures hashtable binary-tree

我有一个二进制树,如 -

            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);   

由于键2有2个值,所以第二个没有插入HashTable - binaryTree?

如何将3和5添加到binaryTree? 或者有更好的数据结构吗?

提前谢谢?

1 个答案:

答案 0 :(得分:2)

看起来你正试图&#34;折叠&#34;邻接列表到单个哈希表中。这是可能的,但你需要将元素的类型改为能够保存两个整数的东西。

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

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的数组而不是自定义类,但使用此类表示的代码将不具有可读性:

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