java - 在 Java 中实现和可视化二叉树

标签 java algorithm binary-tree nodes graphviz

我必须实现此文件中描绘的二叉树

连同类 Diagramm 和二叉树用于定位。

enter image description here

enter image description here

所以按照文本和图片,我必须为这个二叉树实现一个构造函数,一个获取和插入方法。

public class BinaryTree {

 private Node root = null;

private static class Node {
    private Integer key;
    private String value;
    private Node left = null;
    private Node right = null;

    public Node(Integer key, String value) {
        this.key = key;
        this.value = value;
    }
}

public boolean insert(Integer key, String value) {
    if (root == null) {
        root = new Node(key, value);
        return true;
    } else {
        return insert(root, key, value);
    }
}

private boolean insert(Node node, Integer key, String value) {
    if (key.equals(node.key)) {
        // duplicate
        return false;
    } else if (key < node.key) {
        if (node.left == null) {
            node.left = new Node(key, value);
            return true;
        } else {
            return insert(node.left, key, value);
        }
    } else if (key > node.key) {
        if (node.right == null) {
            node.right = new Node(key, value);
            return true;
        } else {
            return insert(node.right, key, value);
        }
    }
    return false;
}

// not tested, crass assumptions, public domain
public String get(Integer key) {
    return get(root, key); // start search from the root.
}

public String get(Node node, Integer key) {
    String result = null; // Assume key is not found

    if (node.key.equals(key)) { // Key matches? This is the result.
        return node.value;
    } else {
        if (key < node.key && node.left != null) { // key is lower than
                                                    // current node,
                                                    // and there is a left
                                                    // branch, keep
                                                    // search from there.
            result = get(node.left, key);
        } else if (key > node.key && node.right != null) { // key is greater
                                                            // than current
                                                            // node,
                                                            // and there is
                                                            // a left
                                                            // branch,
                                                            // keep search
                                                            // from there.
                                                            // The key >
                                                            // node.key is
                                                            // arguably
                                                            // redundant.
            result = get(node.right, key);
        }
    }

    return result;
}

如何实现正确的测试主要功能?在顶部,我必须借助 graphviz 可视化二叉树并在节点类中添加一个方法,该方法为点代码创建一个字符串。它如何与 Eclipse 配合使用?

最佳答案

get 方法将从树中的特定节点开始,并检查该节点本身是否符合条件。如果是,则返回该值。如果没有,它将推迟到适当的分支并继续搜索。

// not tested, crass assumptions, public domain
public String get(Integer key) {
    return get(root, key); // start search from the root.
}

public String get(Node node, Integer key) {
    String result = null; // Assume key is not found

    if (node.key.equals(key)) { // Key matches? This is the result.
        return node.value;
    } else {
        if (key < node.key && node.left != null) {  // key is lower than current node, 
                                                    // and there is a left branch, keep
                                                    // search from there.
            result = get(node.left, key);
        } else if (key > node.key && node.right != null) {  // key is greater than current node,
                                                            // and there is a left branch,
                                                            // keep search from there.
                                                            // The key > node.key is arguably
                                                            // redundant.
            result = get(node.right, key);
        }
    }

    return result;
}

关于java - 在 Java 中实现和可视化二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226365/

相关文章:

php - 将色调分类为最短跨度的算法,例如 `350,354,2,10,15` ? [0-360度]

java - 将二叉树转换为排序数组

java - 嵌套类的对象如何访问它们嵌套的对象?

java - 如何按频率而不是按字母顺序对字符串数组进行排序

algorithm - 如何转换我的 float 以喂养我的神经网络?

algorithm - 众包排名配对的最佳算法?

java - GSON:如何在保持循环引用的同时防止 StackOverflowError?

java - 是否有一个函数可以按给定顺序不断增加矩阵中的数字

algorithm - 如何创建最大高度的红黑树?

Java面试题: get entry by two fields in O(log(n)) time