代码随想录算法训练营第十三天|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
链接:代码随想录
文章目录
- 102.二叉树的层序遍历
- 226.翻转二叉树
- 101.对称二叉树
- 解题方法
- 题目思路
- 示例代码
- 总结
解题思路
1.102.二叉树的层次遍历 解题思路
递归法,创立二维数组,每行填入相同层数的结点;迭代法采用队列的方法,同时使用size[]数组来记录队列个数,每次满足每层结点数时,向下一次迭代。
代码如下(示例):
//递归
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,Integer deep){if(node==null) return;deep++;if(resList.size() < deep){List<Integer> item = new ArrayList<Integer>(); //增加行数resList.add(item);}resList.get(deep-1).add(node.val); //每行添加元素checkFun01(node.left,deep);checkFun01(node.right,deep);}
}
//迭代
class Solution {public List<List<Integer>> resList = new ArrayList<List<Integer>>();public List<List<Integer>> levelOrder(TreeNode root) { //设立矩阵checkFun01(root);return resList;}public void checkFun01(TreeNode node){ if(node == null) return;Queue<TreeNode> que = new LinkedList<TreeNode>();//用队列实现que.offer(node);while(!que.isEmpty()){List<Integer> itemList = new ArrayList<Integer>();int len = que.size();while(len > 0){TreeNode tmpNode = que.poll(); //弹出元素直至每层结束itemList.add(tmpNode.val);if(tmpNode.left!=null) que.offer(tmpNode.left);if(tmpNode.right!=null) que.offer(tmpNode.right);len--;}resList.add(itemList);}}
}
2.226.翻转二叉树 解题思路
直接交换所有的左右结点即可达到镜像的效果,注意不能采用中序遍历,因为会导致前面的左右结点不发生交换,而前序、后序、层序遍历可以满足题意。
代码如下(示例):
//迭代法
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();swap(node);if (node.left != null) {deque.offer(node.left);}if (node.right != null) {deque.offer(node.right);}}}return root;}public void swap(TreeNode root) {TreeNode temp = root.left;root.left = root.right;root.right = temp;}
}//递归法class Solution {public TreeNode invertTree(TreeNode root) {if(root == null){return null;}invertTree(root.left);invertTree(root.right);swapChildren(root);return root;}private void swapChildren(TreeNode root){ //交换两结点TreeNode tmp = root.left;root.left = root.right;root.right = tmp;}
}
3.101.对称二叉树 解题思路
不需要考虑根结点,然后从外测到内测一一对应相等即可
代码如下(示例):
//递归法
class Solution {public boolean isSymmetric(TreeNode root) {return compare(root.left,root.right);}private boolean compare(TreeNode left,TreeNode right){if(left == null && right != null){return false;}if(left != null && right ==null){return false;}if(left == null && right ==null){return true;}if(left.val != right.val){return false;}boolean compareOut = compare(left.left,right.right);boolean compareIn = compare(left.right,right.left);return compareOut&&compareIn;}
}
总结
递归法易理解难单独写,迭代法好像都挺难的/("▔□▔")\
代码随想录算法训练营第十三天|102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树相关推荐
- 代码随想录【day 14 二叉树】| 层序遍历 226.翻转二叉树 101.对称二叉树
代码随想录[day 14 二叉树]| 层序遍历 226.翻转二叉树 101.对称二叉树 层序遍历 卡哥文解 视频讲解 题目链接:102.二叉树的层序遍历 解题思路 代码实现 题目链接:107.二叉树的 ...
- 代码随想录算法训练营第15天,102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...
- 代码随想录算法训练营第十五天 | 102. 二叉树的层序遍历 | 226.翻转二叉树 | 101. 对称二叉树
递归三部曲 确定递归函数的参数和返回值 确定终止条件 确定单层递归的逻辑 102. 二叉树的层序遍历 题解及想法 解法一 :递归法 class Solution {public List<Lis ...
- 代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2
代码随想录算法训练营第十五天 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2 1.1 层序遍历 10 1.1.1 102.二叉树的层序遍历 思路: 通过队列实现 class Solut ...
- 代码随想录算法训练营day1
代码随想录算法训练营第一天| 704. 二分查找.27. 移除元素. 704.二分查找 题目链接:leetcode704 Binary search 暴力解法: class Solution {pub ...
- 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和
代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...
- 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II. 977.有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977.有序数组的 ...
- 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II
代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...
- 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II
代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...
最新文章
- R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序
- oracle中怎么用累计,oracle实现累加,累计百分比计算
- mysql 网络io_MySQL的各种网络IO超时的用法和实现
- Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
- CodeForces - 1417F Graph and Queries(克鲁斯卡尔重构树的dfs序上建线段树)
- 简单的FreeBSD 的内核编译
- linux的内置的账户_6 款面向 Linux 用户的开源绘图应用程序
- [洛谷P1369]矩形
- 使用LazZiya.ExpressLocalization开发多区域性ASP.NET Core 3、2、1项目
- 通过CDN引入jQuery的几种方式
- LearnOpenGL之OpenGL特性
- 2018/12/06 L1-022 L1-022 奇偶分家 Java
- css 伪类大全,CSS 伪类
- FusionChartsFree用法简介
- mysql报错:1264-Out of range value for column ‘字段‘ at row 1
- 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付
- 【C#教程14/16】:命名空间
- 2022浙江省计算机三级网络及安全技术考试自学资料(1)(更新于2.28)
- type-c速度测试软件,速度篇—Type-C/USB3.0接口到底谁快_固态硬盘评测-中关村在线...
- oracle中 in 的最大限制
热门文章
- uclinux-2008r1(bf561)内核的icache支持(3):__fill_code_cplbtab
- BUUCTF-MISC-[XMAN2018排位赛]ppap(详细解析)
- ceres m_Ceres M游戏下载-Ceres M精灵纪元安卓版v1.1.27 - 起点软件园
- 成语状元王html5游戏在线玩,幸运成语答题王
- 商业智能BI在信息化建设中到底处于一个什么位置?
- 使用numpy生成二维正态分布
- RXXW H系列变频器调试指导参考手册
- 物料分类帐之价格控制和差异分析
- JavaSE基础笔记——常用API、Lambda、常见算法
- EasyExcel快如入门