Minimum Depth of Binary Tree


public class Solution {
public int minDepth(TreeNode root) {
if(root==null) return 0;
int lh = minDepth(root.left);
int rh = minDepth(root.right);
return (lh==0 || rh==0)?lh+rh+1:Math.min(lh,rh)+1;
}
}

Maxmum Depth of Binary Tree


class Solution {
public:
int dep = 0;
int maxDepth(TreeNode* root) {
dep = dfs(root);
return dep;
}
int dfs(TreeNode* root){
if(root == NULL) return 0;
int left = dfs(root->left);
int right = dfs(root->right);
return 1+max(left,right);
}
};

Binary Tree Maximum Path Sum


public class Solution {
int maxValue;
public int maxPathSum(TreeNode root) {
maxValue = Integer.MIN_VALUE;
maxPathDown(root);
return maxValue;
}
private int maxPathDown(TreeNode node) {
if (node == null) return 0;
int left = Math.max(0, maxPathDown(node.left));
int right = Math.max(0, maxPathDown(node.right));
maxValue = Math.max(maxValue, left + right + node.val);
return Math.max(left, right) + node.val;
}
}

Sum Root to Leaf Numbers


public class Solution {
public int sumNumbers(TreeNode root) {
return sum(root, 0);
}
public int sum(TreeNode n, int s){
if (n == null) return 0;
if (n.right == null && n.left == null) return s*10 + n.val;
return sum(n.left, s*10 + n.val) + sum(n.right, s*10 + n.val);
}
}

Binary Tree Paths


public class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> rst = new ArrayList<String>();
if(root == null) return rst;
StringBuilder sb = new StringBuilder();
helper(rst, sb, root);
return rst;
} public void helper(List<String> rst, StringBuilder sb, TreeNode root){
if(root == null) return;
int tmp = sb.length();
if(root.left == null && root.right == null){
sb.append(root.val);
rst.add(sb.toString());
sb.delete(tmp , sb.length());
return;
}
sb.append(root.val + "->");
helper(rst, sb, root.left);
helper(rst, sb, root.right);
sb.delete(tmp , sb.length());
return; }
}

Binary Tree Right Side View


public class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<Integer>();
if(root == null) return res;
LinkedList<TreeNode> q = new LinkedList<TreeNode>();
q.addLast(root);
while(!q.isEmpty()){
int tmp = q.size();
TreeNode tmpNode ;
for(int i=1;i<=tmp;i++){
tmpNode = q.getFirst();
q.removeFirst();
if(i == tmp){
res.add(tmpNode.val);
}
if(tmpNode.left!=null) q.addLast(tmpNode.left);
if(tmpNode.right!=null) q.addLast(tmpNode.right);
}
}
return res;
}
}

Path Sum I


public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
if (root == null) {
return false;
}
if (sum - root.val == 0 && root.left == null && root.right == null) {
return true;
}
return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);
}
}

Path Sum II


public class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> cur = new ArrayList<Integer>();
help(root,sum,0,res,cur);
return res;
}
public void help(TreeNode p, int sum,int curSum,List<List<Integer>> res,List<Integer> curList){
if(p==null) return;
curList.add(p.val);
if(curSum+p.val == sum && p.left==null && p.right==null){
res.add(new ArrayList(curList));
curList.remove(curList.size()-1);
return;
}else{
help(p.left,sum,curSum+p.val,res,curList);
help(p.right,sum,curSum+p.val,res,curList);
}
curList.remove(curList.size()-1);
return;
}
}

Kth Smallest Element in a BST


public class Solution {
public int kthSmallest(TreeNode root, int k) {
LinkedList<TreeNode> s = new LinkedList<TreeNode>();
int cnt = 0;
TreeNode p = root;
while(!s.isEmpty() || p!=null){
if(p!=null){
s.addFirst(p);
p = p.left;
}else{
p = s.getFirst();
s.removeFirst();
cnt++;
if(cnt==k){return p.val;}
p = p.right;
}
}
return 0;
}
}

Unique Binary Search Trees


public class Solution {
public int numTrees(int n) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(0,1);
map.put(1,1);
return numTrees(n, map);
} private int numTrees(int n, Map<Integer, Integer> map){
// check memory
if(map.containsKey(n)) return map.get(n);
// recursion
int sum = 0;
for(int i = 1;i <= n;i++)
sum += numTrees(i-1, map) * numTrees(n-i, map);
map.put(n, sum);
return sum;
}
}

Unique Binary Search Trees II


public class Solution {
public List<TreeNode> generateTrees(int n) {
// DP, compute and store trees for intermediate ranges from 1 to n
// time: exponential, since for each range the number of trees is combinatorial
// space: O(n^2)
if (n == 0) {
List<TreeNode> result = new ArrayList<TreeNode>();
//result.add(null);
return result;
}
List<TreeNode>[][] treesForRange = (ArrayList<TreeNode>[][]) new ArrayList[n+2][n+1];
for (int step = 0; step < n; step++) {
for (int i = 1; i <= n - step; i++) {
int j = i + step;
treesForRange[i][j] = new ArrayList<TreeNode>();
if (step == 0) {
treesForRange[i][j].add(new TreeNode(i));
continue;
}
// k is a possible root for range i-j
for (int k = i; k <= j; k++) {
// two ugly if blocks for boundary cases:
// when k == i, the left subtree is null
// when k == j, the right subtree is null
if (treesForRange[i][k-1] == null) {
treesForRange[i][k-1] = new ArrayList<TreeNode>();
treesForRange[i][k-1].add(null);
}
if (treesForRange[k+1][j] == null) {
treesForRange[k+1][j] = new ArrayList<TreeNode>();
treesForRange[k+1][j].add(null);
}
for (TreeNode leftNode : treesForRange[i][k-1]) {
for (TreeNode rightNode : treesForRange[k+1][j]) {
TreeNode root = new TreeNode(k);
root.left = leftNode;
root.right = rightNode;
treesForRange[i][j].add(root);
}
}
}
}
}
return treesForRange[1][n];
}
}

LeetCode(五)的更多相关文章

  1. LeetCode第五天

    leetcode 第五天 2018年1月6日 22.(566) Reshape the Matrix JAVA class Solution { public int[][] matrixReshap ...

  2. LeetCode算法题-Number Complement(Java实现-五种解法)

    这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...

  3. LeetCode算法题-Longest Palindrome(五种解法)

    这是悦乐书的第220次更新,第232篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第87题(顺位题号是409).给定一个由小写或大写字母组成的字符串,找到可以用这些字母构 ...

  4. LeetCode算法题-Find the Difference(Java实现-五种解法)

    这是悦乐书的第214次更新,第227篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第82题(顺位题号是389).给定两个字符串s和t,它们只包含小写字母.字符串t由随机混 ...

  5. leetcode算法刷题(五)——动态规划(三)

    今天的题目不是leetcode上面的.只是觉得动态规划还是不算很熟练,就接着找了点DP的题练练 最长递增子序列的长度 题目的意思:传入一个数组,要求出它的最长递增子序列的长度.例如:如在序列1,-1, ...

  6. leetcode#42 Trapping rain water的五种解法详解

    leetcode#42 Trapping rain water 这道题十分有意思,可以用很多方法做出来,每种方法的思想都值得让人细细体会. 42. Trapping Rain WaterGiven n ...

  7. LeetCode子域名访问计数-Python3.7<五>

    上一篇:LeetCode 键盘行<四> 题目:https://leetcode-cn.com/problems/subdomain-visit-count/description/ 一个网 ...

  8. LeetCode 笔记系列五 Generate Parentheses

    题目: Given n pairs of parentheses, write a function to generate all combinations of well-formed paren ...

  9. 最长回文子串 C++实现 java实现 leetcode系列(五)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

随机推荐

  1. linux keepalived+LVS 实现mysql 从库负载均衡

    前情提要: 参考链接: http://www.osyunwei.com/archives/7464.html ps:以上为本次操作的主要参考资料,非常感谢此文作者的贡献,我的随笔的主要目的是 说明在使 ...

  2. KVM虚拟机管理

    #定义新的存储池 virsh pool-define-as spool4lj dir - - - - "/home/lj/spool4lj" virsh pool-build sp ...

  3. 电源开关IC

    RT9701:IO控制的电源开关.宽输入电压(2.2~6v),1.1A的连续输出电流.用在USB开关电压,热插拔和电池电池充电器的场合应用

  4. CRM 2016 js 奇怪现象

    假如 js 中如果定义了 两个字段的onchage 事件. 如果一个字段的onchange事件,改变了另一个字段的值,那么也会触发另一个字段的onchange事件!!!!????

  5. 本机搭建外网web服务器

    版权声明:本文为楼主原创文章,未经楼主允许不得转载,如要转载请注明来源. 首先声明一下楼主是个开发人员,按理说这些搭建服务器什么的,和楼主半毛钱的关系都没有.但是呢,楼主是个爱学习的人,懂得德智体全面 ...

  6. Application tried to present a nil modal view controller on target “Current View Controller”解决方案

    情景再现 1,自定义一个storyboard: 打开xcode,按下cmd+N,新建一个Storyboard--->next 将新建立的storyboard命名为:TestViewControl ...

  7. string.Format 格式化输出日期

    string.Format("{0:d}",System.DateTime.Now) 结果为:2009-3-20 (月份位置不是03) string.Format("{0 ...

  8. angular学习笔记,很乱哈哈。

    1.鼠标悬浮出现的信息v-bind:title="message" 2.对该便签进行结果判断显示隐藏v-if=''控制台设置 app3.seen = false(消失).控制台设置 ...

  9. Android 环境常见问题

    1.启动adb时报: adb server is out of data.kill... ADB server didn't ACK    *failed to start daemon*    er ...

  10. 【转载】shell编程——if语句 if -z -n -f -eq -ne -lt

    shell编程中条件表达式的使用 if  条件then Commandelse Commandfi                              别忘了这个结尾 If语句忘了结尾fites ...