if (node == null)
{
return 0;
}
叶节点的子节点为空。因此,这就是说,一旦我们过了叶子,没有更多的节点。
如果我们不经过叶节点,我们必须计算高度,并且这个代码这样递归。
return 1 +
当前节点将当前正在计算的子树的高度增加1。
Math.max(heightOfBinaryTree(node.left),
heightOfBinaryTree(node.right));
我们递归地计算左子树(node.left)和右子树(node.right)的高度。由于我们计算最大深度,我们取这两个深度的最大值。
我上面显示了递归函数是正确的。因此调用父节点上的函数将计算整个树的深度。
这里是从this document的树的高度的图形表示.h是树的高度,hl和hr分别是左和右子树的高度。
Moreover, I thought of just doing a
BFS with the root of the binary tree
as the argument to get the height of
the binary tree. Is the previous
approach better than mine?Why?
您提供的代码是DFS的一种形式。由于您必须处理所有节点以找到树的高度,所以DFS和BFS之间没有运行时差异,尽管BFS将使用O(N)内存,而DFS将使用O(logN)内存。 BFS也稍微复杂一些,因为它需要一个队列,而DFS使用“内置”递归堆栈。