【发布时间】:2019-09-18 12:51:39
【问题描述】:
我有一个 binarySearch 树,我想创建一个方法 assignFirst。
这个方法应该在树中找到具有最小值的节点并且 相应地更新树的“first”属性。
我有很多方法,但我不想把它们都包括在这里,因为我想让它保持简短和简单。 因此,我将在该类中包含该类和一些特性。
public class BinarySearchTree<E extends Comparable<E>>
{
private BSTNode<E> root; // root of overall tree
private int numElements;
private BSTNode<E> first;
// post: constructs an empty search tree
public BinarySearchTree()
{
this.root = null;
this.numElements = 0;
}
private void assignFirst()
{
if (root.left == null)
{
first.data = root.data;
}
else
{
first.data = root.left.data;
}
}
public class Iterator
{
private BSTNode<E> currentNode;
public Iterator()
{
currentNode = first;
}
public boolean hasNext()
{
return currentNode != null;
}
public E next()
{
E value = currentNode.data;
currentNode = currentNode.next;
return value;
}
}
private static class BSTNode<E>
{
public E data;
public BSTNode<E> left;
public BSTNode<E> right;
public BSTNode<E> parent;
public BSTNode<E> next;
public BSTNode(E data)
{
this(data, null, null, null, null);
}
public BSTNode(E data, BSTNode<E> left, BSTNode<E> right, BSTNode<E> parent, BSTNode<E> next)
{
this.data = data;
this.left = left;
this.right = right;
this.parent = parent;
this.next = next;
}
}
}
我更新我的方法看起来像这样。我仍然不确定这是否是正确的做法。
private void assignFirst()
{
if (first.left != null)
{
first = first.left;
}
else
{
first = root;
}
}
【问题讨论】:
-
您当前的
assignFirst()方法似乎与您描述的问题几乎无关。您正在修改某些节点的数据,而不是设置树的属性。 -
@JohnBollinger 我知道这是不正确的,我正在询问如何启动它的策略。
-
不管怎样,你有一个BST,你想识别携带最小值的节点。想一想这个问题。如果从根节点开始,你会往哪个方向寻找更小的节点?如果你在 any 节点,你会去哪个方向寻找更小的节点?怎么知道什么时候到达最小值的节点?
-
你向左走,直到你不能再走。 @JohnBollinger
-
对我来说很有意义。
标签: java recursion binary-search-tree nodes