如何计算二叉搜索树中每个节点的深度?

时间:2015-06-11 10:06:59

标签: java binary-search-tree treenode

我的任务是计算每个节点的深度并将其存储在“深度”中。在Node类中给出。但我不知道应该如何处理这项任务。我在互联网上寻找一些例子,但没有发现任何适合我的任务。 这是我给定的Node类的代码:

Node
{int value; Node left, right; int depth;}

我以为我可以使用类似的方法来计算树的高度,但它没有成功。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

void updateDepth(Node node, int depth)
{
    if (node != null)
    {
        node.depth = depth;
        updateDepth(node.left, depth + 1); // left sub-tree
        updateDepth(node.right, depth + 1); // right sub-tree
    }
}

使用updateDepth(root, 0);

进行通话

答案 1 :(得分:2)

二叉树上的大多数算法通过递归工作 - 你检查一个基本条件,看看是否应该停止递归,然后你为左右孩子做你的事情,可能累积你发现的东西。在这种情况下,

static void addDepth(Node n, int currentDepth) {
    if (n == null) return; // check base condition

    // store current depth in this node
    n.setDepth(currentDepth);

    // recursion
    addDepth(left, currentDepth+1);
    addDepth(right, currentDepth+1);
}

或者,(假设addDepthNode类的一部分):

void addDepth(int current) {
     depth = current;
     if (left != null) left.addDepth(current+1);
     if (right != null) right.addDepth(current+1);
}

两个版本都是等价的。在第二种情况下,我在递归之前检查基本条件,而不是在查看节点之前(在第一版中完成)。