Как создать метод assignFirst с узлами в BinarySearchTree? - PullRequest
1 голос
/ 30 апреля 2019

У меня есть двоичное дерево поиска, и я хочу создать метод assignFirst.

Этот метод должен найти узел в дереве с наименьшим значением и соответствующим образом обновить «первый» атрибут дерева.

У меня много методов, но я не хочу включатьвсе они здесь, так как я хочу быть кратким и простым.Поэтому я включу этот класс и некоторые функции в этот класс.

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

1 Ответ

0 голосов
/ 30 апреля 2019

Я понял это.Я написал это следующим образом.

private void assignFirst()
{
    BSTNode<E> node = root;
    while(node.left != null)
    {
        node = node.left;
    }
    first = node;
}
...