Tree 节点之间具有链表的BST
我正在尝试使用(不平衡的)BST实现树集。我还希望为树中的所有节点维护一个有序的双链接列表Tree 节点之间具有链表的BST,tree,linked-list,binary-search-tree,treeset,Tree,Linked List,Binary Search Tree,Treeset,我正在尝试使用(不平衡的)BST实现树集。我还希望为树中的所有节点维护一个有序的双链接列表 TreeSet<Integer> set = new TreeSet<>(); set.add(10); set.add(5); set.add(15); set.add(12); // The linked list would be 5 <-> 10 <-> 12 <-> 15 我有一个递归的add方法,就像这样 boolean add(T
TreeSet<Integer> set = new TreeSet<>();
set.add(10);
set.add(5);
set.add(15);
set.add(12);
// The linked list would be 5 <-> 10 <-> 12 <-> 15
我有一个递归的add
方法,就像这样
boolean add(T data) {
int oldSize = getSize();
root = add(data, root, head, tail);
return getSize() != oldSize;
}
Node<T> add(T data, Node<T> n, Node<T> low, Node<T> high) {
if (n == nullNode) {
n = new Node<T>(data);
n.left = n.right = nullNode;
// But what do I do now to update the linked list?
} else {
int result = compare(data, n.data);
if (result < 0) {
n.left = add(data, n.left, low, n);
} else if (result > 0) {
n.right = add(data, n.right, n, high);
}
}
return n;
}
boolean添加(T数据){
int oldSize=getSize();
根=添加(数据、根、头、尾);
返回getSize()!=oldSize;
}
节点添加(T数据、节点n、节点低、节点高){
if(n==nullNode){
n=新节点(数据);
n、 左=n。右=空节点;
//但是我现在要做什么来更新链表呢?
}否则{
int结果=比较(数据,n.数据);
如果(结果<0){
n、 左=添加(数据,n.左,低,n);
}否则,如果(结果>0){
n、 右=添加(数据,n.右,n.高);
}
}
返回n;
}
其中low
和high
设置链接列表中插入新节点的位置的边界
我在维护节点的
next
和prev
属性时遇到问题 您必须跟踪上一个节点。i、 e.以前访问过的节点
这是通过查找索引前置项来完成的。Inorder Preference是节点左子树的最右叶
同样,您必须找到顺序更高的后续节点来设置下一个节点
当然,这里也有例外——如果节点是叶呢?
在这种情况下,inorder PRESIONER将是第一个祖先,其右子树将包含当前节点。类似地,用于查找下一个节点
在线查看inorder的前身和后续概念
注意:这不是最有效的方法,但应该是一个很好的开始方法
boolean add(T data) {
int oldSize = getSize();
root = add(data, root, head, tail);
return getSize() != oldSize;
}
Node<T> add(T data, Node<T> n, Node<T> low, Node<T> high) {
if (n == nullNode) {
n = new Node<T>(data);
n.left = n.right = nullNode;
// But what do I do now to update the linked list?
} else {
int result = compare(data, n.data);
if (result < 0) {
n.left = add(data, n.left, low, n);
} else if (result > 0) {
n.right = add(data, n.right, n, high);
}
}
return n;
}