TreeSet<T> 简单实现



package com.mypack.ds;

import java.util.Random;

public class TreeSet<T>
{

/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
TreeSet<Integer> tree = new TreeSet<Integer>();
for (int i = 0; i < 20; i ++)
{
tree.add(new Random().nextInt(100));
}
System.out.println(tree);
}

private Entry<T> root;

private volatile Entry<T> entry;

public TreeSet()
{

}

public void add(T node)
{
if (root == null)
{
entry = root;
final Entry<T> tmp = entry;
synchronized (TreeSet.class)
{
if (tmp == null)
{
root = new Entry<T>(node);
}
}
}
else
{
insertNode(root, node);
}
}

public String toString()
{
StringBuilder sb = new StringBuilder();

travel(root, sb);

return sb.toString();
}

void travel(Entry<T> root, StringBuilder sb)
{
if (root.left == null)
{
sb.append(root.value).append(",");
}
else
{
travel(root.left, sb);
}
sb.append(root.value).append(",");
if (root.right == null)
{
sb.append(root.value).append(",");
}
else
{
travel(root.right, sb);
}
}

synchronized void insertNode(Entry<T> obj, T node)
{
Comparable<T> c = (Comparable<T>)node;

// right
if (c.compareTo(obj.value) > 0)
{
if (obj.right != null)
{
insertNode(obj.right, node);
}
else
{
Entry<T> en = new Entry<T>(node);
obj.right = en;
}
}
// left
else
{
if (obj.left == null)
{
Entry<T> en = new Entry<T>(node);
obj.left = en;
}
else
{
insertNode(obj.left, node);
}
}
}

static class Entry<T>
{
Entry left;
T value;
Entry right;

Entry(T value)
{
this.value = value;
}
}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值