二叉树相关算法需了解汇总-基础算法操作

文章目录

  • 144.二叉树的前序遍历
  • 145.二叉树的后序遍历
  • 94.二叉树的中序遍历
  • 102.二叉树的层序遍历
  • 107.二叉树的层次遍历倒序
  • 199.二叉树的右视图
  • 637.二叉树的层平均值
  • 429.N叉树的层序遍历
  • 515.在每个树行中找最大值
  • 116.填充每个节点的下一个右侧节点指针
  • 104.二叉树的最大深度
  • 111.二叉树的最小深度

144.二叉树的前序遍历

/*** 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> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traversal(res,root);return res;}public void traversal(List<Integer> res ,TreeNode root){if(root == null){return;}res.add(root.val);traversal(res,root.left);traversal(res,root.right);}
}

145.二叉树的后序遍历

/*** 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> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traversal(res,root);return res;}public void traversal(List<Integer> list, TreeNode root){if(root == null){return;}traversal(list,root.left);traversal(list,root.right);list.add(root.val);}
}

94.二叉树的中序遍历

/*** 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> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();traversal(res,root);return res;}   public void traversal(List<Integer> list,TreeNode root){if(root == null){return;}traversal(list,root.left);list.add(root.val);traversal(list,root.right);}
}

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<>();traversal(res,root,0);return res;}public void traversal(List<List<Integer>> list,TreeNode root, int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}

107.二叉树的层次遍历倒序

/*** 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<>();traversal(res,root,0);Collections.reverse(res);return res;}public void traversal(List<List<Integer>> list,TreeNode root,int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}

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<List<Integer>> res = new ArrayList<>();traversal(res,root,0);List<Integer> result = new ArrayList<>();for(List<Integer> list:res){result.add(list.getLast());}return result;}public void traversal(List<List<Integer>> list,TreeNode root,int deep){if(root == null){return;}while(list.size() <deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}

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<List<Integer>> rest = new ArrayList<>();List<Double> res = new ArrayList<>();traversal(rest,root,0);for(List<Integer> l :rest){res.add(l.stream().mapToInt(Integer::intValue).average().orElse(0));}return res;}public void traversal(List<List<Integer>> list,TreeNode root,int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}

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<>();traversal(res,root,0);return res;}public void traversal(List<List<Integer>> list,Node root,int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);for(Node node : root.children){traversal(list,node,deep+1);}}
}

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<List<Integer>> res = new ArrayList<>();traversal(res,root,0);List<Integer> result = new ArrayList<>();for(List<Integer> l : res){result.add(l.stream().max(Integer::compare).orElse(0));}return result;}public void traversal(List<List<Integer>> list, TreeNode root, int deep){if(root == null){return;}if(list.size() < deep+1){list.add(new ArrayList<>());}list.get(deep).add(root.val);traversal(list,root.left,deep+1);traversal(list,root.right,deep+1);}
}

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

/*
// 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> nodeq = new LinkedList<>();nodeq.add(root);while(!nodeq.isEmpty()){int size = nodeq.size();for(int i = 0; i < size; i++){Node node = nodeq.poll();if(i < size - 1){node.next = nodeq.peek();}if(node.left != null){nodeq.add(node.left);}if(node.right != null){nodeq.add(node.right);}}}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) {if(root == null){return 0;}int leftH = maxDepth(root.left);int rightH = maxDepth(root.right);return Math.max(leftH,rightH) + 1;}
}

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 leftH = minDepth(root.left);int rightH = minDepth(root.right);if(leftH == 0 || rightH == 0){return Math.max(leftH,rightH) + 1;}return Math.min(leftH,rightH)+ 1;}
}

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

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

相关文章

Transformer实战-系列教程21:DETR 源码解读8 损失计算:(SetCriterion类)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 DETR 算法解读 DETR 源码解读1&#xff08;项目配置/CocoDetection类/ConvertCocoP…

06 分频器设计

分频器简介 实现分频一般有两种方法&#xff0c;一种方法是直接使用 PLL 进行分频&#xff0c;比如在 FPGA 或者 ASIC 设计中&#xff0c;都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性&#xff0c;无法得到频率很低的时钟信号&#xff0c;比如输入 …

MySQL-触发器(TRIGGER)

文章目录 1. 触发器是什么&#xff1f;2. 触发器的优缺点3. 触发器的类型3.1 INSERT触发器3.2 UPDATE触发器3.3 DELETE触发器 4. 触发器的相关语法4.1 创建触发器4.2 查看触发器4. 删除触发器 1. 触发器是什么&#xff1f; 定义&#xff1a;MySQL 的触发器和存储过程一样&…

JS面向对象:五.原型对象

使用原型对象来共享方法&#xff0c;可以避免为每个对象创建独立的方法副本&#xff0c;提高代码的效率和可维护性。 在JavaScript中&#xff0c;每个函数都有一个 prototype 属性&#xff0c;这个属性是一个指向原型对象的指针。原型对象是一个普通的对象&#xff0c;它包含可…

如何写项目的ReadMe

README README主要是为了体现项目全景概览或项目描述&#xff0c;告知刚接触的新人&#xff0c;如何快速上手项目&#xff0c;降低沟通成本。 README编写的原则&#xff1a;简明扼要&#xff0c;条理清晰&#xff0c;图文并茂。 至少包含但不限于以下方面&#xff1a; 项目简介…

小邦教你16招轻松玩转职场

社会中的政治和经济密不可分&#xff0c;在职场中职场政治和个人能力同样密不可分&#xff0c;职场中的精英们个个有能力&#xff0c;懂政治&#xff0c;这一点官场最为尤甚。以下是小邦为大家收集的教你16招轻松玩转职场&#xff0c;仅供参考&#xff0c;大家一起来看看吧。 1…

JAVA表达式

1.Java开发工具 IntelliJ IDEA被认为是目前Java开 发效率最快的IDE工具。是 JetBrains公司的产品&#xff0c;这家公司 总部位于捷克共和国的首都布拉格。 它整合了开发过程中实用的众多功 能&#xff0c;智能提示错误&#xff0c;强大的调试工 具&#xff0c;Ant&#xff0c;J…

Kafka数据清理机制

Apache Kafka中数据清理机制涉及的主要概念有两个&#xff1a;基于时间或大小的日志保留策略&#xff0c;以及日志压缩。这些特性允许Kafka管理其存储空间&#xff0c;保留有用的数据&#xff0c;同时清除过时或重复的数据。 基于时间或大小的日志保留策略 日志保留策略配置参…

【label studio 升级记录】

label studio 版本升级记录 label studio 从1.8.1 升级到1.11.0 过程记录启动后遇到问题1:解决方法: 遇到问题2 安装版本与启动显示的版本不一致解决方法: label studio 从1.8.1 升级到1.11.0 过程记录 # 当前(2024-02)最新版是1.11.0 pip install -U label-studio启动后遇到…

SQL-Labs靶场“1-5”关通关教程

君衍. 一、准备工作二、第一关 基于GET单引号字符型注入1、源码分析2、联合查询注入过程 三、第二关 基于GET整型注入1、源码分析2、联合查询注入过程 四、第三关 基于GET单引号变形注入1、源码分析2、联合查询注入过程 五、第四关 基于GET双引号字符型注入1、源码分析2、联合查…

美国云服务器是干什么的

对于美国服务器是干什么的&#xff0c;相信很多小白用户不是非常了解&#xff0c;接下来小编就为您整理发布美国云服务器是干什么的相关资讯&#xff0c;希望对您有帮助。 美国云服务器是一种提供计算资源的互联网服务&#xff0c;主要用于托管网站、应用程序和存储数据。 美国…

「Python系列」Python编程第一步

文章目录 一、Python初始案例1. 安装Python解释器2. 编写一个简单的Python程序3. 运行Python程序方法一&#xff1a;命令行运行方法二&#xff1a;集成开发环境&#xff08;IDE&#xff09; 4. 学习Python基础5. 练习和实践 二、Python常见问题1. 数据类型转换2. 文件操作3. 错…

你真的会数据结构吗:单链表

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 哈咯各位铁汁们&#xff0c;大家新年过得快乐吗&#xff1f;反正大伟是过得很快乐&#xff0c;天天就是玩玩玩…

面试redis篇-02缓存穿透

原理 例&#xff1a; 一个get请求&#xff1a;api/news/getById/1 缓存穿透&#xff1a;查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库 解决方案一 缓存空数据&#xff0c;查询返回的数据为空&#xff0c;仍把…

Axure9必备函数(2)

字符串的属性和函数 length:返回字符串的字符长度&#xff0c;包括空格&#xff0c;注意:汉字占1个字符charAt(index):返回字符串中指定索引处的字符indexOf(searchValue"):返回调用函数的字符串中搜索值的第一个实例的起始索引。如果未找到搜索值&#xff0c;则返回 -1la…

B 样条基函数

一、B 样条基函数的定义和性质 令 U { u 0 , u 1 , ⋯ , u m } U\{u_0,u_1,\cdots,u_m\} U{u0​,u1​,⋯,um​} 是一个单调不减的实数序列&#xff0c;即 u i ≤ u i 1 , i 0 , 1 , ⋯ , m − 1 u_i\leq u_{i1},i0,1,\cdots,m-1 ui​≤ui1​,i0,1,⋯,m−1。其中&#xff…

ABAQUS应用04——集中质量的添加方法

文章目录 0. 背景1. 集中质量的编辑2. 约束的设置3. 总结 0. 背景 混塔ABAQUS模型中&#xff0c;机头、法兰等集中质量的设置是模型建立过程中的一部分&#xff0c;需要研究集中质量的添加。 1. 集中质量的编辑 集中质量本身的编辑没什么难度&#xff0c;我已经用Python代码…

Leetcode 第 124 场双周赛 Problem D 修改数组后最大化数组中的连续元素数目(Java + 模拟(分段/区间))

文章目录 题目思路Java 模拟&#xff08;分段/区间&#xff09;第 1 步&#xff1a;第 2 步&#xff1a;第 3 步&#xff1a; 复杂度Code 题目 Problem: 100205. 修改数组后最大化数组中的连续元素数目给你一个下标从 0 开始只包含 正 整数的数组 nums 。一开始&#xff0c;你…

Django后端开发——模型层及ORM介绍

文章目录 参考资料Django配置MySQL安装mysqlclient创建数据库进入数据库的操作可能遇到的问题及解决方案Pycharm配置settings.py 模型![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c83753397bf6481d8defde26537903bf.png)ORM介绍示例终端&#xff1a;settings.py…

Linux——开发工具的使用

目录 Linux软件包管理器 yum rzsz Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的 Linux编译器——gcc/g 预处理 编译 汇编 链接 函数库 Linux项目自动化构建工具 make/makefile make原理 项目清理 Linux调试器g…