经验tips:

Recursion is the best friend of tree-related problems.

一是只要遇到字符串的子序列或配准问题首先考虑动态规划DP,二是只要遇到需要求出所有可能情况首先考虑用递归。

93 - restore IP address

注:

A。在return条件之前先判断valid的条件 1, max bits per partition[size() - startIndex <= (4 - parts) * 3] 2, min bit per partiton[1].否则在1111 的情况会重复输出level直接被push进result里。

B。recursive语句在for循环的if的判断语句里。

95 - unique binary search tree II

对于第i个node generate from 1~i - 1 给左子树 i+1~n右子树。

三层循环: 第i个node vector<TreeNode*> left left[j] right[k] 最里层循环new节点i 赋值i, i->left, i->right。然后push进vector tree里。最后return tree。

循环前加判断条件:当start > end 直接push NULL 然后return tree。

98. Validate Binary Search Tree

空树为真。

中序遍历,用lastnode记录并比较 如果大于当前node的val就return false。

判断条件:

A。if(!isValid(root ->left)) return false

B。if(!lastnode && lastnode->val>=root->val) return false  =====>   lastnode往下走 = root

C。return isValid(root -> right)

100. Same Tree

对每一个点的判断条件有三个:

A。同时为空 真

B。不同时为空 假

C。值不同 假

return isSame(p->left,q->left)&&isSame(p->right,q->right);

101. Symmetric Tree

判断方法与same tree 基本相同 最后recursive的时候左右树的左右子树对称比较。

104. Maximum Depth of Binary Tree

最底层:root == NULL时 return 0;

每一层会加一:return (l > r) ? l + 1 : r + 1;

int l = maxDepth(root -> left);

105. Construct Binary Tree from Preorder and Inorder Traversal

preorder第一个是root。在inorder中找root,然后分别generate左右子树。

typedef vector<int>::iterator Iter;

开始要判断是否为空树。

106. Construct Binary Tree from Inorder and Postorder Traversal

postorder最后一个是root。

108. Convert Sorted Array to Binary Search Tree

找median。先new root,左右分别recursive调用generate左右子树。

109. Convert Sorted List to Binary Search Tree

中序遍历。先generate左子树用变量存起来,再连接到root上,再root->right = generate(list,mid,end);

要先过一遍list求size。

110. Balanced Binary Tree

Maximum depth of binary tree的变形。

A。空树 return 0

B。不符合判断 return -1

C。依然return (l > r) ? l + 1:r+1。返回depth

主程序判断:只要返回值为-1就return false

111. Minimum Depth of Binary Tree

最底层:return条件:为空,返回0;为叶子节点,返回1。

与max depth不同的地方是return条件 +1换地方了。

最后return min(l,r)的时候别忘了加根。+ 1

112. Path Sum

return的是布尔值。

bool helper(TreeNode* root, int sum, int val){
  if(root == NULL) return false;
  val += root -> val;//语句顺序!!!!!
  if(val == sum && !root -> left && !root -> right){
    return true;
  }
  //val += root -> val;
  return helper(root -> left, sum, val)||helper(root -> right, sum, val);
}

113. Path Sum II

return为空。

每一层level pop的时候是在dfs完左右子树的时候。

result.push_back(level)的条件成立时 并不返回。原因是如果不在遍历完左右子树的时候返回,level里面的值会多出。

void dfs(TreeNode* root, int sum, vector<vector<int>>& result, vector<int>& level, int val){
  if(root == NULL) return;
  level.push_back(root -> val);//注意:对称结构在最外层!!!!!
  val += root -> val;
  if(val == sum && !root -> left && !root -> right){
    result.push_back(level);
    //return;
  }
  //while(root){
  else{
    if(root -> left){
      //level.push_back(root -> left -> val);
      dfs(root -> left, sum, result, level, val);
      //level.pop_back();
    }
    if(root -> right){
      //level.push_back(root -> right -> val);
      dfs(root -> right, sum, result, level, val);
      //level.pop_back();
    }
  }
  level.pop_back();
  val -= root -> val;
  return;////为啥在此处return啊!!!????

}

12/15/16

124. Binary Tree Maximum Path Sum

注:传的是节点的值 不是高度 最后return max(left, right) + root -> val;

但主程序返回的并不是recursion的值 而是全局变量ans

12/17/16

129. Sum Root to Leaf Numbers

Recursion. Similar as [LeetCode] Binary Tree Maximum Path Sum Solution, the difference here is only adding a track variable to sum all the paths.

void generate(TreeNode* root, int sum, int path){
  if(root == NULL) return;
  path = path * 10 + root -> val;
  if(root -> left == NULL && root -> right == NULL){
    sum += path;
    return;
  }
  generate(root -> left, sum, path);
  generate(root -> right, sum, path);
}

12/19/16

133. Clone Graph

注意:别忘了初始化table!!!!
table[newnode -> label] = newnode;

Recursive - leetcode [递归]的更多相关文章

  1. LeetCode 递归(Recursion) 培训专题 讲解文章翻译 (附链接)

     递归 - 时间复杂度 在本文中, 我们主要介绍如何分析递归算法程序中的时间复杂度.. 在一个递归程序中, 它的时间复杂度 O(T) 一般来说就是他总共递归调用的次数 (定义为 R) 以及每次调用时所 ...

  2. LeetCode递归解题模板

    39 40 78. Subsets https://leetcode.com/problems/subsets/description/ void subsets(vector<int>& ...

  3. React-router4 第七篇 Recursive Paths 递归路径

    https://reacttraining.com/react-router/web/example/recursive-paths import React from 'react' import ...

  4. LeetCode递归 -2(Recursion) 培训专题 讲解文章翻译 (附链接) (2019-04-09 15:50)

    递归 - 空间复杂度  在本文中, 我们将讨论如何分析递归算法的空间复杂度. 在计算递归算法的空间复杂度时,最需要考虑的两个部分就是: 递归相关空间 (recursion related space) ...

  5. LeetCode || 递归 / 回溯

    呜呜呜 递归好不想写qwq 求“所有情况”这种就递归 17. Letter Combinations of a Phone Number 题意:在九宫格上按数字,输出所有可能的字母组合 Input: ...

  6. [03] Recursive Function递归应用

    递归应用 1.理解 百科:一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的: 理解:函数调用自己的过程,这类函数处理的事情具有重复性,处理此类实行可用while或者for,但结构上 ...

  7. Leetcode 递归题

    24. 两两交换链表中的节点 题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-&g ...

  8. [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历

    题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...

  9. wget 递归下载整个网站

    wget -r -p -np -k http://xxx.com/xxx -r,  --recursive(递归)          specify recursive download.(指定递归下 ...

随机推荐

  1. 异步执行Dos命令

    //Minute const ; /// <summary> /// 执行命令行 /// </summary> /// <param name="cmdLine ...

  2. 转载-windows下MySql5.6.17没有setup.exe时的安装方法

    转载出处为:http://blog.csdn.net/zgrjkflmkyc/article/details/25321537 (最终,我也没有安装下述的方法安装成功,虽然有服务,但是服务启动不正常, ...

  3. SSH的整合

    SSH的整合 struts2和hibernate的配置我这里就不多说了,先把两个有关的东西说下.一个是所有的包.struts2+hibernate3+spring2.5我包准备放上去给大家下载. ht ...

  4. 乔布斯,TED,我的演讲

    乔布斯传这部独立影片虽然以失败告终,但是人们把期待留给了索尼影业即将投拍的官方乔布斯传记电影. 据传,这部影片将以乔布斯最成功的四次演讲作为主线,这无疑说明,演讲,对于乔布斯这个传奇人物,是非常重要的 ...

  5. TCPDump 抓Loopback数据包

    编写网络程序必备截包工具, unix下面自带tcpdump, linux就不用说了.用于排查网络程序的bug,命令行如何使用请百度谷歌.分析包推荐wireshark,可视化非常方便.一般都是在非Win ...

  6. Docker容器内存监控

    linux内存监控 要明白docker容器内存是如何计算的,首先要明白linux中内存的相关概念. 使用free命令可以查看当前内存使用情况. [root@localhost ~]$ free tot ...

  7. web开发技术中Servlet技术的概述

    1.servlet是什么:servlet是一个位于服务器端的java应用程序它可以像jsp一样,直接输出信息 servlet类必须继承HttpServlet类,否则,不能称为serlvet servl ...

  8. Hibernate介绍和入门案例

    一身转战三千里,一剑曾当百万师 如果你在之前没有学过SSH三大框架,那么你之前肯定是通过JDBC来对数据库进行操作.现在,你完全可以把跟数据库交互的操作直接交给Hibernate. Hibernate ...

  9. 【转】PYTHON open/文件操作

    [注]虽是转载,但会在原文上有些修改! open/文件操作f=open('/tmp/hello','w')#open(路径+文件名,读写模式)#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a ...

  10. Mysql连表查询

    http://blog.csdn.net/qmhball/article/details/8000003 可以参考这篇文章