递归三部曲

  1. 确定递归函数的参数和返回值
  2. 确定终止条件
  3. 确定单层递归的逻辑

102. 二叉树的层序遍历

题解及想法

解法一 :递归法

class Solution {public List<List<Integer>> resList = new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {checkFun01(root,0);return resList;}//递归public void checkFun01(TreeNode node,int deep){if(node == null){return;}deep++;if(deep >resList.size()){List<Integer> list = new ArrayList<Integer>();resList.add(list);}resList.get(deep - 1).add(node.val);checkFun01(node.left,deep);checkFun01(node.right,deep);}}

解法二 : 迭代法

如上图, 通过一个队列来辅助遍历,用size来保存每一层的个数。

class Solution {public List<List<Integer>> resList = new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) {checkFun02(root);return resList;}//迭代方式  public void checkFun02(TreeNode node){if(node == null){return;}Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(node);while(!queue.isEmpty()){int size = queue.size();List<Integer> list = new ArrayList<Integer>();while(size-- > 0){TreeNode node1 = queue.poll();list.add(node1.val);if(node1.left != null){queue.offer(node1.left);}if(node1.right != null){queue.offer(node1.right);}}resList.add(list);}}
}

226.翻转二叉树

题解及想法

解法一 :递归法

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode invertTree(TreeNode root) {if(root == null) return null;TreeNode node = root.left;root.left = root.right;root.right = node;invertTree(root.left);invertTree(root.right);return root;}
}

解法二 : 迭代法

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/class Solution {public TreeNode invertTree(TreeNode root) {if(root == null) return null;ArrayDeque<TreeNode> deque = new ArrayDeque<>();deque.offer(root);while(!deque.isEmpty()){int size = deque.size(); //获取每一层的个数while(size-- > 0){TreeNode node = deque.poll();TreeNode temp = node.left;node.left = node.right;node.right = temp;if (node.left != null) deque.offer(node.left);if (node.right != null) deque.offer(node.right);}}return root;}
}

101. 对称二叉树

题解及想法

采用后序遍历来递归。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {return isCompare(root.left,root.right);}public boolean isCompare(TreeNode left,TreeNode right){if(left == null && right != null){return false;}else if(left != null && right == null){return false;}else if(left == null && right == null){return true;}else if(left.val != right.val){return false;}boolean left1 = isCompare(left.left,right.right);boolean right1 = isCompare(left.right,right.left);return left1 && right1;}
}

代码随想录算法训练营第十五天 | 102. 二叉树的层序遍历 | 226.翻转二叉树 | 101. 对称二叉树相关推荐

  1. 代码随想录算法训练营第十五天| 102层序遍历、226.翻转二叉树、101. 对称二叉树

    层序遍历 参考文章:代码随想录 解题思路: 层序遍历一个二叉树.就是从左到右一层一层的去遍历二叉树.这种遍历的方式和我们之前讲过的都不太一样. 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合 ...

  2. 代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2

    代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2 1.1 层序遍历 10 1.1.1 102.二叉树的层序遍历 思路: 通过队列实现 class Solut ...

  3. 代码随想录算法训练营三十五天|860,406,452

    860. 柠檬水找零 贪心,20-10+5,10-5 class Solution { public:bool lemonadeChange(vector<int>& bills) ...

  4. 代码随想录算法训练营第二十五天|216.组合总和III、17.电话号码的字母组合

    LeetCode 216.组合总和III 链接:216. 组合总和 III 思路: 这道题目与77. 组合仅有一点不同,就是这道题目找到的组合的总和需要满足额外的条件.所以在递归终止条件里增加了一个条 ...

  5. 代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合

    目录 LeeCode 216.组合总和III LeeCode 17.电话号码的字母组合 LeeCode 216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 思路:本题和 ...

  6. 代码随想录【day 14 二叉树】| 层序遍历 226.翻转二叉树 101.对称二叉树

    代码随想录[day 14 二叉树]| 层序遍历 226.翻转二叉树 101.对称二叉树 层序遍历 卡哥文解 视频讲解 题目链接:102.二叉树的层序遍历 解题思路 代码实现 题目链接:107.二叉树的 ...

  7. 代码随想录算法训练营第十六天[二刷] | 找寻二叉的深度

    104.二叉树的最大深度 递归 首先知道 题目问的整个树的最大的深度 = root 的高度 这样用post-order 写起来会很方便 为什么Post - order? 处理完子树之后,再 把数值(本 ...

  8. 代码随想录算法训练营第二十四天 | 理论基础、77. 组合

    学习目标 学习回溯算法理论基础, 并进行练习 学习内容 回溯算法理论基础 文章链接:回溯算法理论基础 小结:回溯算法模板: void backtracking(参数) {if (终止条件) {存放结果 ...

  9. 代码随想录算法训练营第十三天|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

    链接:代码随想录 文章目录 102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 解题方法 题目思路 示例代码 总结 解题思路 1.102.二叉树的层次遍历 解题思路 递归法,创立二维数组 ...

最新文章

  1. springboot在centos下安装环境+部署war包
  2. Java ThreadLocal的使用
  3. Mybatis-Plus批量插入数据太慢,使用rewriteBatchedStatements属性优化,堪称速度与激情!
  4. Pandas创建DataFrame对象的几种常用方法
  5. VMware vSphere之vCenter安装
  6. javascript 实现单击和双击并存
  7. 关于软件测试的5个误传
  8. jquery 删除数组元素
  9. Python 帮助文件
  10. tftp64工具使用
  11. 【数据库原理及应用】经典题库附答案(14章全)——第一章:数据库基础知识
  12. 批判性思维_通过批判性反思评估可视化创作系统
  13. 高德地图经纬度距离数据库排序,Spring Data JPA,Kotlin 实现版本
  14. python爬虫实验总结_Python爬虫总结
  15. b标签、Strong标签、h1标签的区别以及使用
  16. Consul 踩坑日记,节点id冲突
  17. html图片定位代码怎么写,如何在css中设置插入图片定位
  18. 未能将文件 *** \bin\Release\**.dll 复制到 \obj\Release\Package\PackageTmp\bin\***.dll VS发布程序报错 解决办法
  19. 1688按关键词搜索
  20. Android Studio 连真机提示No Device Found,adb.exe无法找到入口

热门文章

  1. 虚拟软件VMware
  2. 自定义字段MongoDb与Mysql 扩展表性能分析
  3. 实现纯前端生成字母头像
  4. 百家姓氏json数据
  5. golang net/http库的学习
  6. 推特中根据推文的id查找推文
  7. python初学者爬取数据完整教程
  8. SSL证书怎么删除私钥密码保护?
  9. 前端获取图片压缩后上传给后台
  10. 25-爬取大众点评的评论【坑多】