您的位置:首页 > 其它

LeetCode:寻找二叉树的最小深度

2017-03-23 09:54 295 查看
原题:Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf
node.

翻译:已知一棵二叉树,求它的最小深度。最小深度是指从根节点往下通过最短路径到他最近的叶节点所经过的节点数。

这道题和二叉树的遍历有关,先来补充一下二叉树遍历的知识:



深度优先遍历:如图,深度优先遍历是指沿着树的节点分支,尽可能深(直到遇到叶节点)的向下遍历,先遍历根节点,再遍历左子树,再遍历右子树,如此递归,图中这颗                                     树的遍历结果为{1,2,4,5,3,6,7}

实现方法:使用栈这种数据结构。

1.将根节点压入栈低

2.判断栈是否为空,不为空,弹出栈顶元素,并输出节点值

                                3.出栈节点的右边节点(可认为右子树)入栈

                                4.出栈节点的左边节点(可认为左子树)入栈

                                5.递归2,3,4步,直到遍历完成

         注:这里不给出具体的代码实现

广度优先遍历:广度优先遍历是指沿着树的层次,由上至下,由左至右的遍历。先遍历根节点,再遍历左孩子节点,再遍历右孩子节点,如此递归。如中这颗树的遍历结果
    为{1,2,3,4,5,6,7}

        实现方法:使用队列这种数据结构

                              1.根节点进入队列

                              2.判断队列是否为空,不为空,队首元素出列,并输出节点值

                              3.出列节点的左边节点(可认为左子树)进入队尾

                              4.出列节点的右边节点(可认为右子树)进入队尾

                              5.递归2,3,4步,直到遍历完成

   回到正题,先贴代码(LeetCode上大神的解)

         public int run(TreeNode root) {
if (root == null) return 0;
int left = run(root.left);
int right = run(root.right);
return (left == 0 || right == 0) ? left + right + 1 : Math.min(left,right) + 1;
}              这里运用递归的思想
      第一句很好理解,考虑根节点为空的情况,此树为空树,应当返回0.

              第二句左子树递归,得到左子树的最小深度

              第三句右子树递归,得到右子树的最小深度

              第四局返回,考虑左子树或者右子树为空的情况,则返回另外一颗子树的深度即可。如果左右子树均不为空,则返回左右子树中较小的那个值。

              注:这里的(left+right+1)和Math.min(left.right)+1中的1是指根节点,也应该算上
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息