代码随想录算法训练营第十五天 | 102. 二叉树的层序遍历 | 226.翻转二叉树 | 101. 对称二叉树
递归三部曲
- 确定递归函数的参数和返回值
- 确定终止条件
- 确定单层递归的逻辑
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. 对称二叉树相关推荐
- 代码随想录算法训练营第十五天| 102层序遍历、226.翻转二叉树、101. 对称二叉树
层序遍历 参考文章:代码随想录 解题思路: 层序遍历一个二叉树.就是从左到右一层一层的去遍历二叉树.这种遍历的方式和我们之前讲过的都不太一样. 需要借用一个辅助数据结构即队列来实现,队列先进先出,符合 ...
- 代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2
代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2 1.1 层序遍历 10 1.1.1 102.二叉树的层序遍历 思路: 通过队列实现 class Solut ...
- 代码随想录算法训练营三十五天|860,406,452
860. 柠檬水找零 贪心,20-10+5,10-5 class Solution { public:bool lemonadeChange(vector<int>& bills) ...
- 代码随想录算法训练营第二十五天|216.组合总和III、17.电话号码的字母组合
LeetCode 216.组合总和III 链接:216. 组合总和 III 思路: 这道题目与77. 组合仅有一点不同,就是这道题目找到的组合的总和需要满足额外的条件.所以在递归终止条件里增加了一个条 ...
- 代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合
目录 LeeCode 216.组合总和III LeeCode 17.电话号码的字母组合 LeeCode 216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 思路:本题和 ...
- 代码随想录【day 14 二叉树】| 层序遍历 226.翻转二叉树 101.对称二叉树
代码随想录[day 14 二叉树]| 层序遍历 226.翻转二叉树 101.对称二叉树 层序遍历 卡哥文解 视频讲解 题目链接:102.二叉树的层序遍历 解题思路 代码实现 题目链接:107.二叉树的 ...
- 代码随想录算法训练营第十六天[二刷] | 找寻二叉的深度
104.二叉树的最大深度 递归 首先知道 题目问的整个树的最大的深度 = root 的高度 这样用post-order 写起来会很方便 为什么Post - order? 处理完子树之后,再 把数值(本 ...
- 代码随想录算法训练营第二十四天 | 理论基础、77. 组合
学习目标 学习回溯算法理论基础, 并进行练习 学习内容 回溯算法理论基础 文章链接:回溯算法理论基础 小结:回溯算法模板: void backtracking(参数) {if (终止条件) {存放结果 ...
- 代码随想录算法训练营第十三天|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
链接:代码随想录 文章目录 102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 解题方法 题目思路 示例代码 总结 解题思路 1.102.二叉树的层次遍历 解题思路 递归法,创立二维数组 ...
最新文章
- springboot在centos下安装环境+部署war包
- Java ThreadLocal的使用
- Mybatis-Plus批量插入数据太慢,使用rewriteBatchedStatements属性优化,堪称速度与激情!
- Pandas创建DataFrame对象的几种常用方法
- VMware vSphere之vCenter安装
- javascript 实现单击和双击并存
- 关于软件测试的5个误传
- jquery 删除数组元素
- Python 帮助文件
- tftp64工具使用
- 【数据库原理及应用】经典题库附答案(14章全)——第一章:数据库基础知识
- 批判性思维_通过批判性反思评估可视化创作系统
- 高德地图经纬度距离数据库排序,Spring Data JPA,Kotlin 实现版本
- python爬虫实验总结_Python爬虫总结
- b标签、Strong标签、h1标签的区别以及使用
- Consul 踩坑日记,节点id冲突
- html图片定位代码怎么写,如何在css中设置插入图片定位
- 未能将文件 *** \bin\Release\**.dll 复制到 \obj\Release\Package\PackageTmp\bin\***.dll VS发布程序报错 解决办法
- 1688按关键词搜索
- Android Studio 连真机提示No Device Found,adb.exe无法找到入口