二进制搜索树 - Java

时间:2015-08-01 00:09:00

标签: java binary-search-tree

嘿伙计我有深度问题(找到二叉树的深度)和printTree(按顺序打印树)。这是我的代码。

Bar

这是我提供的用于测试这些方法的Test类。

import java.util.LinkedList;
import java.util.Queue;

public class BSTDictionary<T1, T2>{

private static class Node<T>{
    public Node<T> left;
    public Node<T> right;
    public T data;
    public Node(T data)
    {
        this.data = data;
    }
    public Node<T> getLeft()
    {
        return this.left;
    }
    public void setLeft(Node<T> left)
    {
        this.left = left;
    }
    public Node<T> getRight()
    {
        return this.right;
    }
    public void setRight(Node<T> right)
    {
        this.right = right;
    }
}

public int depth(Node root){

    if(root == null) {
        return 0;
    }
    else return 1 + Math.max((root.getLeft(), root.getRight());
}

public void printTree(){

    Node<?> n;
    Queue<Node<?>> nodequeue = new LinkedList<Node<?>>();
    while (!nodequeue.isEmpty())
    {
        Node<?> next = nodequeue.remove();
        System.out.print(next.data + " ");
        if (next.getLeft() != null)
        {
            nodequeue.add(next.getLeft());
        }
        if (next.getRight() != null)
        {
            nodequeue.add(next.getRight());
        }
    }}}

谢谢你们:)

2 个答案:

答案 0 :(得分:2)

public int depth(Node root){

if(root == null) {
    return 0;
}
else return 1 + Math.max((root.getLeft(), root.getRight());
}

将最后一行替换为else return 1 + Math.max(depth(root.getLeft()), depth(root.getRight()));

其他消息来自您未在问题中包含的搜索功能。

答案 1 :(得分:1)

返回1 + Math.max时出现编译错误((root.getLeft(),root.getRight());

有一个额外的(并且root.getLeft返回的节点不是int类型。

我不确定你将如何获得树深度...只获得root.getLeft,因为它只会将节点返回到左边。根据我的理解,我们需要获取节点数然后再添加1它。

我也在尝试和你一起学习BST。如果我发现其他任何事情,我会告诉你。如果我的理解有问题,你也请告诉我。

快乐学习!