java - 创建不带数组的二叉搜索树

标签 java binary-search-tree

所以我已经成功地用 Java 使用数组创建了 BST,但是一位 friend 告诉我他已经在不使用数组的情况下完成了它。我大致知道他是如何做到的,这里是一个例子(我省略了构造函数、getter 和 setter):

class TreeNode implements Comparable<TreeNode>
{
    private int value;
    private TreeNode leftChild;
    private TreeNode rightChild;
    private TreeNode parent;

正如您所看到的,您可以仅链接左侧和右侧节点,但这让我了解了添加方法的工作原理。到目前为止,我刚刚初始化了一个新对象,如下所示:

public void add(Comparable c)
{
    TreeNode node = new TreeNode(c);
}

但是这让我想知道如果我无法像在数组中一样访问它,我如何链接到前一个对象?每次我去链接一个对象时,我最终都会添加一个新对象。我对如何实现这个方法有点困惑,你会怎么做?

最佳答案

我很确定你必须做的事情与此类似:

class TreeNode<T extends Comparable<T>> {
    private T value;
    private TreeNode<T> left;
    private TreeNode<T> right;
    private TreeNode<T> parent;

    public TreeNode(TreeNode parent, T value) {
        this.parent = parent;
        this.value = value;
    }

    public TreeNode<T> add(T t) {
        if(t.compareTo(value) < 0) {
            if(left == null) {
                left = new TreeNode(this, t);
                return left;
            } else {
                return left.add(t);
            }
        } else {
            if(right == null) {
                right = new TreeNode(this, t);
                return right;
            } else {
                return right.add(t);
            }
        }
    }

    public boolean find(T t) {
        if(t.equals(value)) {
            return true;
        } else {
            if(t.compareTo(value) < 0) {
                if(left == null) {
                    return false;
                } else {
                    return left.find(t);
                }
            } else {
                if(right == null) {
                    return false;
                } else {
                    return right.find(t);
                }
            }
        }
    }
}

class Tree<T extends Comparable<T>> {
    private TreeNode<T> topElement;

    public TreeNode<T> add(T t) {
        if(topElement == null) {
            topElement = new TreeNode(null, t);
            return topElement;
        } else {
            return topElement.add(t);
        }
    }

    public boolean find(T t) {
        if(topElement == null) {
            return false;
        } else {
            return topElement.find(t);
        }
    }
}

关于java - 创建不带数组的二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33763789/

相关文章:

java - 用于存储数据的适当数据结构

java - 为什么在带有 Java 8 日期的 Jackson 的 ObjectMapper 中使用 dateFormat 时不从 JSON 中排除毫秒?

java - 如何使用 SmartGWT 手动/以编程方式打开 ComboboxItem/SelectItem 的 pickList?

c - C : remove node function 中的二叉搜索树

java - 使用 GSON 时在 JerseyTest 中抛出 MessageBodyProviderNotFoundException

java - 如何在java中播放mp3文件

在 C 中创建和显示基本 BST

java - 如何将节点从二叉树插入数组?

java - BST 和随机 BST 的区别

java - 二叉搜索树选择方法实现