博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode Minimum Depth of Binary Tree
阅读量:5221 次
发布时间:2019-06-14

本文共 2843 字,大约阅读时间需要 9 分钟。

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.


解题思路:

方法一: 递归解法,注意如果有个节点只有一边孩子时,不能返回0,要返回另外一半边的depth。 

方法二: BFS, 求layer 的数目,当一个节点没有孩子的时候,返回depth。


Java code

方法一: 递归解法

public int minDepth(TreeNode root) {        if(root == null) {            return 0;        }        if(root.left == null && root.right == null) {            return 1;        }        int leftmin = minDepth(root.left);        int rightmin = minDepth(root.right);        if(root.right == null) {            return leftmin + 1;        }        if(root.left == null) {            return rightmin + 1;        }else {            return Math.min(leftmin, rightmin) + 1;        }    }

或者

public int minDepth(TreeNode root) {        if(root == null)            return 0;        int minleft = minDepth(root.left);        int minright = minDepth(root.right);        if(minleft==0 || minright==0)            return minleft>=minright?minleft+1:minright+1;        return Math.min(minleft,minright)+1;    }

方法二: BFS, 求layer 的数目,当一个节点没有孩子的时候,返回depth。

public int minDepth(TreeNode root) {        //use BFS        if(root == null){            return 0;        }        int depth = 1;        LinkedList
queue = new LinkedList
(); queue.add(root); int curNum = 1; //num of node left in current level int nextNum = 0; // num of nodes in next level while(!queue.isEmpty()){ TreeNode cur = queue.poll(); curNum--; if(cur.left == null && cur.right == null) { return depth; } if(cur.left != null) { queue.add(cur.left); nextNum++; } if(cur.right != null){ queue.add(cur.right); nextNum++; } if(curNum == 0) { curNum = nextNum; nextNum = 0; depth++; } } return depth; }

20160601

recursion

public class Solution {    public int minDepth(TreeNode root) {        //use recursion every time get min        //base case        if (root == null) {            return 0;        } else if (root.left == null && root.right == null) {            return 1;        }        int num = 0;                if (root.left != null && root.right != null) {            num = Math.min(minDepth(root.left), minDepth(root.right)) + 1;        } else if (root.left == null && root.right != null) {            num = minDepth(root.right) + 1;        } else if (root.left != null && root.right == null) {            num = minDepth(root.left) + 1;        }        return num;    }}

Reference:

1. http://www.cnblogs.com/springfor/p/3879680.html

 

转载于:https://www.cnblogs.com/anne-vista/p/4805994.html

你可能感兴趣的文章
django之 使用py文件操作django项目中的表
查看>>
android:textAppearance解析
查看>>
ES6对象扩展
查看>>
javaweb—jstl如何循环List中的Map数据 (转)
查看>>
工厂方法模式
查看>>
转:测试用例的书写方式及测试模板大全
查看>>
[vijos1891]学姐的逛街计划
查看>>
如何配置 SpaceVim
查看>>
【模板】dinic算法
查看>>
Net学习日记_基础提高_5
查看>>
sed replace HEX sequence in your binary file:
查看>>
Android——黑名单管理(二)
查看>>
第三次迭代冲刺会议
查看>>
什么是云计算?
查看>>
Nobody gives away anything valuable for free.
查看>>
高等代数习题课(手写)
查看>>
ARGV数组的作用
查看>>
除法运算
查看>>
2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)
查看>>
weixin.com域名易主 传交易价格仅次360.com
查看>>