二叉树结构之求最大、最小深度
1.最大深度
思路:利用【深度优先遍历】获取当前点的【左孩子树】的最大深度,【右孩子树】的最大深度,
取两个最大深度的最大值,然后加上本身节点所占用的一个深度,就是以该节点为根的最大深度,
递归返回的到根节点时,就是这个二叉树的最大深度。
下面是C++的实现代码:
int maxDepth(TreeNode* root) {
if (!root)
return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
是不是惊呆了,竟然如此简洁,这就是递归的魅力吧。
2.最小深度
思路:最小深度和最大深度实现一样,不过有个不同的地方是,如果两个孩子节点有一个以上为空,那就取最大 的那个深度,即另一个不为空就取不为空的,如果两个都为空取0.
下面是实现代码:
int minDepth(TreeNode* root) {
if (!root)
return 0;
int leftHeigh = minDepth(root->left);
int rightHeigh = minDepth(root->right);
if (leftHeigh == 0 || rightHeigh == 0) {
//当某个节点的左孩子节点为空时,则不能算入最小深度中,取右孩子节点的深度,反之亦然。都为空则取0
return max(leftHeigh, rightHeigh) + 1;
}
else {
return min(leftHeigh, rightHeigh) + 1; //这步和最大深度求法一样,只不过max换成了min
}
}