我的任务是计算每个节点的深度并将其存储在“深度”中。在Node类中给出。但我不知道应该如何处理这项任务。我在互联网上寻找一些例子,但没有发现任何适合我的任务。 这是我给定的Node类的代码:
Node
{int value; Node left, right; int depth;}
我以为我可以使用类似的方法来计算树的高度,但它没有成功。有什么帮助吗?
答案 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);
}
或者,(假设addDepth
是Node
类的一部分):
void addDepth(int current) {
depth = current;
if (left != null) left.addDepth(current+1);
if (right != null) right.addDepth(current+1);
}
两个版本都是等价的。在第二种情况下,我在递归之前检查基本条件,而不是在查看节点之前(在第一版中完成)。