【算法刷题day15】Leetcode:各种层序遍历、226.翻转二叉树、101. 对称二叉树

文章目录

    • Leetcode 层序遍历
      • 解题思路
      • 代码
      • 总结
    • Leetcode 226.翻转二叉树
      • 解题思路
      • 代码
      • 总结
    • Leetcode 101. 对称二叉树
      • 解题思路
      • 代码
      • 总结

草稿图网站
java的Deque

Leetcode 层序遍历

题目:102.二叉树的层序遍历
题目:107. 二叉树的层序遍历 II
题目:199.二叉树的右视图
题目:637.二叉树的层平均值
题目:429.N叉树的层序遍历
题目:515.在每个树行中找最大值
题目:116.填充每个节点的下一个右侧节点指针
题目:117.填充每个节点的下一个右侧节点指针II
题目:104.二叉树的最大深度
解析:代码随想录解析

解题思路

代码

102.二叉树的层序遍历

/*** 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 List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<List<Integer>>();if (root == null)return res;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){int size = queue.size();List<Integer> item = new ArrayList<Integer>();for(int i = 0; i < size; i++){TreeNode node = queue.poll();item.add(node.val);if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}res.add(item);}return res;}
}

107. 二叉树的层序遍历 II

/*** 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 List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> res = new ArrayList<List<Integer>>();if (root == null)return res;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){int size = queue.size();List<Integer> item = new ArrayList<Integer>();for (int i = 0; i < size; i++){TreeNode node = queue.poll();item.add(node.val);if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}res.add(item);}Collections.reverse(res);return res;}
}

199.二叉树的右视图

/*** 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 List<Integer> rightSideView(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Deque<TreeNode> deque = new LinkedList<TreeNode>();deque.add(root);res.add(root.val);while (!deque.isEmpty()){int size = deque.size();for (int i = 0; i < size; i++){TreeNode node = deque.poll();if (node.left != null)  deque.add(node.left);if (node.right != null)  deque.add(node.right);}if (!deque.isEmpty())res.add(deque.getLast().val);}return res;}
}

637.二叉树的层平均值

/*** 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 List<Double> averageOfLevels(TreeNode root) {List<Double> res = new ArrayList<Double>();if (root == null)return res;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while (!queue.isEmpty()){int size = queue.size();double sum = 0;for (int i = 0; i < size; i++){TreeNode node = queue.poll();sum += node.val;if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}res.add(sum / size);}return res;}
}

429.N叉树的层序遍历

/*
// Definition for a Node.
class Node {public int val;public List<Node> children;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, List<Node> _children) {val = _val;children = _children;}
};
*/class Solution {public List<List<Integer>> levelOrder(Node root) {List<List<Integer>> res = new ArrayList<List<Integer>>();if (root == null)return res;Queue<Node> queue = new LinkedList<Node>();queue.add(root);while (!queue.isEmpty()){int size = queue.size();List<Integer> item = new ArrayList<Integer>();for (int i = 0; i < size; i++){Node node = queue.poll();item.add(node.val);for (Node n : node.children){if (n != null)queue.add(n);}}res.add(item);}return res;}
}

515.在每个树行中找最大值

/*** 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 List<Integer> largestValues(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null)return res;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while (!queue.isEmpty()){int size = queue.size();int max = Integer.MIN_VALUE;for (int i = 0; i < size; i++){TreeNode node = queue.poll();max = Math.max(max, node.val);if (node.left != null)  queue.add(node.left);if (node.right != null)  queue.add(node.right);}res.add(max);}return res;}
}

116.填充每个节点的下一个右侧节点指针

117.填充每个节点的下一个右侧节点指针II

/*
// Definition for a Node.
class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val = _val;}public Node(int _val, Node _left, Node _right, Node _next) {val = _val;left = _left;right = _right;next = _next;}
};
*/class Solution {public Node connect(Node root) {if (root == null)return root;Queue<Node> queue = new LinkedList<Node>();queue.add(root);while (!queue.isEmpty()){int size = queue.size();Node pre = queue.poll();if (pre.left != null)   queue.add(pre.left);if (pre.right != null)  queue.add(pre.right);for (int i = 1; i < size; i++){Node cur = queue.poll();if (cur.left != null)   queue.add(cur.left);if (cur.right != null)  queue.add(cur.right);pre.next = cur;pre = cur;}}return root;}
}

104.二叉树的最大深度

/*** 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 int maxDepth(TreeNode root) {int depth = 0;if (root == null)return depth;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){int size = queue.size();depth++;for (int i = 0; i < size; i++){TreeNode node = queue.poll();if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}}return depth;}
}

111.二叉树的最小深度

/*** 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 int minDepth(TreeNode root) {if (root == null)return 0;int minDepth = Integer.MAX_VALUE;int depth = 0;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){int size = queue.size();depth++;for (int i = 0; i < size; i++){TreeNode node = queue.poll();if (node.left == null && node.right == null)minDepth = Math.min(minDepth, depth);if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}}return minDepth==Integer.MAX_VALUE ? 0 : minDepth;}
}//优化,不需要全部遍历完,因为是一层一层找下去,所以第一个叶子就是最低的
/*** 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 int minDepth(TreeNode root) {if (root == null)return 0;int depth = 0;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){int size = queue.size();depth++;for (int i = 0; i < size; i++){TreeNode node = queue.poll();if (node.left == null && node.right == null)return depth;if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}}return depth;}
}

总结

暂无

Leetcode 226.翻转二叉树

题目: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 root;TreeNode tmp = invertTree(root.left);root.left = invertTree(root.right);root.right = tmp;return root;}
}//更能体现前序遍历和后续遍历
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null)return root;invertTree(root.left);invertTree(root.right);swapChildren(root);return root;}private void swapChildren(TreeNode node){TreeNode tmp = node.left;node.left = node.right;node.right = tmp;}
}//层序遍历
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null)return root;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while (!queue.isEmpty()){int size = queue.size();for (int i = 0; i < size; i++){TreeNode node = queue.poll();swapChildren(node);if (node.left != null)  queue.add(node.left);if (node.right != null) queue.add(node.right);}}return root;}private void swapChildren(TreeNode node){TreeNode tmp = node.left;node.left = node.right;node.right = tmp;}
}//前序
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null)return root;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.pop();swapChildren(node);if (node.left != null) stack.push(node.left);if (node.right != null) stack.push(node.right);}return root;}private void swapChildren(TreeNode node){TreeNode tmp = node.left;node.left = node.right;node.right = tmp;}
}//统一深度遍历
class Solution {public TreeNode invertTree(TreeNode root) {if (root == null)return root;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);while(!stack.isEmpty()){TreeNode node = stack.peek();if (node != null){stack.pop();if (node.left != null) stack.push(node.left);if (node.right != null) stack.push(node.right);stack.push(node);stack.push(null);}else{stack.pop();node = stack.pop();swapChildren(node);}}return root;}private void swapChildren(TreeNode node){TreeNode tmp = node.left;node.left = node.right;node.right = tmp;}
}

总结

暂无

Leetcode 101. 对称二叉树

题目: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) {if (root == null)return true;return compare(root.left, root.right);}public boolean compare(TreeNode left, TreeNode right){if (left == null && right == null)return true;else if (left == null || right == null || left.val != right.val)return false;elsereturn compare(left.left, right.right) && compare(left.right, right.left);}
}//使用队列
class Solution {public boolean isSymmetric(TreeNode root) {if (root == null)return true;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root.left);queue.add(root.right);while (!queue.isEmpty()){TreeNode left = queue.poll();TreeNode right = queue.poll();if (left == null && right == null)continue;if (left == null || right == null || left.val != right.val)return false;queue.add(left.left);queue.add(right.right);queue.add(left.right);queue.add(right.left);}return true;}
}//使用栈
class Solution {public boolean isSymmetric(TreeNode root) {if (root == null)return true;Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root.left);stack.push(root.right);while (!stack.isEmpty()){TreeNode left = stack.pop();TreeNode right = stack.pop();if (left == null && right == null)continue;if (left == null || right == null || left.val != right.val)return false;stack.push(left.left);stack.push(right.right);stack.push(left.right);stack.push(right.left);}return true;}
}

总结

暂无

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习:神经网络模型的剪枝和压缩简述

深度学习的神经网路的剪枝和压缩&#xff0c;大致的简述&#xff0c; 主要采用&#xff1a; network slimming&#xff0c;瘦身网络... 深度学习网络&#xff0c;压缩的主要方式&#xff1a; 1.剪枝&#xff0c;nerwork pruing&#xff0c; 2.稀疏表示&#xff0c;sparse rep…

【Git】分支协同开发

1、前言 由于之前一直是在master上开发 没有分支开发过 接触过好几个项目组 远程仓库不是用码云就是 gitlab 然后几个人在master开发 也没有UAT分支这些 没有分支协同开发很容易把冲突 读完本文 你将对Git分支开发又有一个新的认识 2、概念 master和UAT在远程都是保护分支…

每日面经分享(python进阶 part2)

Python中的装饰器和上下文管理器区别是什么&#xff1f;它们分别适用于哪些场景&#xff1f; a. 装饰器用于在函数或类的外部添加额外功能&#xff0c;而上下文管理器用于管理资源的获取和释放。 b. 装饰器是一种用于修改函数或类行为的技术。适用于需要在函数或类的外部添加额…

鸿蒙实战开发-通过输入法框架实现自绘编辑框

介绍 本示例通过输入法框架实现自会编辑框&#xff0c;可以绑定输入法应用&#xff0c;从输入法应用输入内容&#xff0c;显示和隐藏输入法。 效果预览 使用说明 1.点击编辑框可以绑定并拉起输入法&#xff0c;可以从输入法键盘输入内容到编辑框。 2.可以点击attach/dettac…

【学习分享】小白写算法之冒泡排序篇

【学习分享】小白写算法之冒泡排序篇 前言一、什么是冒泡排序算法二、冒泡排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 最近我要学习下数据结构和算法&#xff0c;有兴趣的小伙伴可以点个关注&#xff0c;一起学习。争取写的浅显易懂。如果你…

解决Toad for Oracle显示乱中文码问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

数据结构记录

之前记录的数据结构笔记&#xff0c;不过图片显示不了了 数据结构与算法(C版) 1、绪论 1.1、数据结构的研究内容 一般应用步骤&#xff1a;分析问题&#xff0c;提取操作对象&#xff0c;分析操作对象之间的关系&#xff0c;建立数学模型。 1.2、基本概念和术语 数据&…

CANoe自带的TCP/IP协议栈中TCP的keep alive机制是如何工作的

TCP keep alive机制我们已经讲过太多次,车内很多控制器的TCP keep alive机制相信很多开发和测试的人也配置或者测试过。我们今天想知道CANoe软件自带的TCP/IP协议栈中TCP keep alive机制是如何工作的。 首先大家需要知道TCP keep alive的参数有哪些?其实就三个参数:CP_KEEP…

Qt QML的枚举浅用

QML的枚举用法 序言概念命名规则在QML定义枚举的规范 用法QML的枚举定义方法供QML调用的&#xff0c;C的枚举定义方法 序言 概念 QML的枚举和C的其实差不多&#xff0c;但是呢&#xff0c;局限比较多&#xff0c;首先不能在main.qml里定义&#xff0c;也不能在子项中定义。 …

C++语言学习(二)——⭐缺省参数、函数重载、引用

1.⭐缺省参数 &#xff08;1&#xff09;缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int…

【前端开发】教程及案例.docx

Web前端开发是创建网页或APP界面呈现给用户的过程&#xff0c;涉及的技术主要包括HTML、CSS、JavaScript、JQuery等&#xff0c;以及衍生出来的各种技术和框架。以下是一些前端开发教程和案例的资源&#xff0c;可以帮助你从基础到高级逐步学习前端开发技术。 ### 在线课程资源…

MySQL的基本操作(超详细)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 &#x1f4d4;&#xff08;零基础&#xff09;专栏&#xff1a;MSQL数据库 欢迎&#x1f64f;点赞&…

flutter官方案例context_menus【搭建与效果查看】【省时】

案例地址 https://github.com/flutter/samples/tree/main/context_menus 1&#xff1a;运行查看有什么可以快捷使用的&#xff0c;更新了些什么&#xff0c;可不可以直接复制粘贴 主要内容&#xff1a;在web端中模拟手机类型的点击长按操作&#xff0c;不能直接运行在安卓与io…

数字化时代应该具备的能力

随着科技的飞速发展&#xff0c;我们正身处一个数字化的时代。在这个信息爆炸的时代&#xff0c;拥有某些关键能力变得尤为重要。以下是我认为在数字化时代&#xff0c;人人必备的五大能力&#xff1a; 1. 信息素养&#xff1a;在数字化时代&#xff0c;信息素养是一种基础能力…

如何处理Jenkins打包npm install没有拉取到最新依赖的问题

问题背景&#xff1a; 我们项目中有私有依赖包 frame&#xff0c;是私有服务器上通过 npm 去管理。frame包 publish 之后&#xff0c;通过Jenkins打包时&#xff0c;npm install 一直没有拉取最新的代码。 思考&#xff1a;通过在本地直接替换 node_modules 里的 frame 包&…

element-ui divider 组件源码分享

今日简单分享 divider 组件&#xff0c;主要有以下两个方面&#xff1a; 1、divider 组件页面结构 2、divider 组件属性 一、组件页面结构 二、组件属性 2.1 direction 属性&#xff0c;设置分割线方向&#xff0c;类型 string&#xff0c;horizontal / vertical&#xff0…

SQLite下一代查询规划器(十)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite 查询优化器概述&#xff08;九&#xff09; 下一篇&#xff1a;SQLite的架构&#xff08;十一&#xff09; 1. 引言 “查询规划器”的任务是弄清楚 找出完成 SQL 语句的最佳算法或“查询计划”。 从 SQLi…

VS2013报错The request was aborted: Could not create SSL/TLS secure channel.

问题描述 Visual Studio 2013 Nuget&#xff08;扩展和更新&#xff09;无法连接网络分析和解决方法A connection to the server could not be established because the following error(s) occurred&#xff1a; The request was aborted: Could not create SSL/TLS secure ch…

NLP学习路线指南总结

当然可以&#xff0c;以下是一份较为详细的NLP学习路线指南&#xff0c;帮助你逐步掌握自然语言处理的核心技术和应用。 一、基础知识与技能 语言学基础&#xff1a; 语言学基本概念&#xff1a;语音、语法、语义等。语言的层次与分类&#xff1a;语音学、音系学、句法学、语…

DS3231SN

这份文件是关于DS3231SN芯片的数据手册&#xff0c;由Maxim Integrated公司生产。DS3231SN是一款高精度的I2C接口集成实时时钟&#xff08;RTC&#xff09;/温度补偿晶体振荡器&#xff08;TCXO&#xff09;/晶体的芯片。以下是该芯片的核心内容概述&#xff1a; 产品概述&…