链接:代码随想录

文章目录

  • 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.对称二叉树相关推荐

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

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

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

    102.二叉树的层序遍历.226.反转二叉树.101.对称二叉树 102.二叉树的层序遍历 二叉树的层次遍历,我们可以定义一个队列, 当访问到某一个节点时,我们将它存在的左右节点放入队列中,便可达到按 ...

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

    递归三部曲 确定递归函数的参数和返回值 确定终止条件 确定单层递归的逻辑 102. 二叉树的层序遍历 题解及想法 解法一 :递归法 class Solution {public List<Lis ...

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

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

  5. 代码随想录算法训练营day1

    代码随想录算法训练营第一天| 704. 二分查找.27. 移除元素. 704.二分查找 题目链接:leetcode704 Binary search 暴力解法: class Solution {pub ...

  6. 代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和

    代码随想录算法训练营第七天| 哈希表理论基础 ,454.四数相加II, 383. 赎金信, 15. 三数之和, 18. 四数之和 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体 ...

  7. 代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II。

    代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II. 977.有序数组的平方 209. 长度最小的子数组 59. 螺旋矩阵 II 977.有序数组的 ...

  8. 代码随想录算法训练营第二天 | 力扣977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II 977.有序数组的平方 题目链接:有序数组的平方 题目描述: 给你一个按 非递减顺序 排序的整 ...

  9. 代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II

    代码随想录算法训练营第二天 | LeetCode977.有序数组的平方 ,209.长度最小的子数组,59.螺旋矩阵II 一. LeetCode977.有序数组的平方 1. 题目链接[LeetCode9 ...

最新文章

  1. R语言dplyr包arrage函数排序dataframe实战:单列排序、多列排序、自定义排序
  2. oracle中怎么用累计,oracle实现累加,累计百分比计算
  3. mysql 网络io_MySQL的各种网络IO超时的用法和实现
  4. Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
  5. CodeForces - 1417F Graph and Queries(克鲁斯卡尔重构树的dfs序上建线段树)
  6. 简单的FreeBSD 的内核编译
  7. linux的内置的账户_6 款面向 Linux 用户的开源绘图应用程序
  8. [洛谷P1369]矩形
  9. 使用LazZiya.ExpressLocalization开发多区域性ASP.NET Core 3、2、1项目
  10. 通过CDN引入jQuery的几种方式
  11. LearnOpenGL之OpenGL特性
  12. 2018/12/06 L1-022 L1-022 奇偶分家 Java
  13. css 伪类大全,CSS 伪类
  14. FusionChartsFree用法简介
  15. mysql报错:1264-Out of range value for column ‘字段‘ at row 1
  16. 基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付
  17. 【C#教程14/16】:命名空间
  18. 2022浙江省计算机三级网络及安全技术考试自学资料(1)(更新于2.28)
  19. type-c速度测试软件,速度篇—Type-C/USB3.0接口到底谁快_固态硬盘评测-中关村在线...
  20. oracle中 in 的最大限制

热门文章

  1. uclinux-2008r1(bf561)内核的icache支持(3):__fill_code_cplbtab
  2. BUUCTF-MISC-[XMAN2018排位赛]ppap(详细解析)
  3. ceres m_Ceres M游戏下载-Ceres M精灵纪元安卓版v1.1.27 - 起点软件园
  4. 成语状元王html5游戏在线玩,幸运成语答题王
  5. 商业智能BI在信息化建设中到底处于一个什么位置?
  6. 使用numpy生成二维正态分布
  7. RXXW H系列变频器调试指导参考手册
  8. 物料分类帐之价格控制和差异分析
  9. JavaSE基础笔记——常用API、Lambda、常见算法
  10. EasyExcel快如入门