LeetCode ACM模式——二叉树篇(二)

news2025/1/20 18:29:38

刷题顺序及思路来源于代码随想录,网站地址:https://programmercarl.com 

 二叉树的定义及创建见:

LeetCode ACM模式——二叉树篇(一)_要向着光的博客-CSDN博客

目录

102. 二叉树的层序遍历

利用队列 

利用递归

107. 二叉树的层序遍历 II

199. 二叉树的右视图

637. 二叉树的层平均值

429. N 叉树的层序遍历

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


102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

利用队列 

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * @author light
 * @Description 二叉树的层序遍历
 *
 *
 * (利用队列:先进先出
 * @create 2023-08-15 14:17
 */
public class levelOrderTest {
	public static void main(String[] args) {
		Integer[] arr={3,9,20,null,null,15,7};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		List<List<Integer>> res=levelOrder(tree2.root);
		System.out.println(res);

	}

	public static List<List<Integer>> levelOrder(TreeNode root) {
		List<List<Integer>> result=new ArrayList<>();
		Deque<TreeNode> que=new ArrayDeque<>(); //队列
		if(root==null){
			return result;
		}
		que.offer(root);
		while(!que.isEmpty()){
			List<Integer> list=new ArrayList<>();
			int size=que.size();
			while(size>0){
				TreeNode node = que.poll();
				list.add(node.val);
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
				size--;
			}
			result.add(list);
		}
		return result;
	}
}

利用递归

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * @author light
 * @Description 二叉树的层序遍历
 *
 * @create 2023-08-15 14:17
 */
public class levelOrderTest {
	public static void main(String[] args) {
		Integer[] arr={3,9,20,null,null,15,7};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		List<List<Integer>> res1=levelOrder2(tree2.root);
		System.out.println(res1);
	}
	public static List<List<Integer>> l=new ArrayList<>();

	public static List<List<Integer>> levelOrder2(TreeNode root) {
		checkFun(root,0);
		return l;
	}

	public static void checkFun(TreeNode root,int deep){
		if(root==null){
			return ;
		}
		deep++;

		if(l.size()<deep){
			List<Integer> item=new ArrayList<>();
			l.add(item);
		}

		l.get(deep-1).add(root.val);
		checkFun(root.left,deep);
		checkFun(root.right,deep);

	}
}

107. 二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)


199. 二叉树的右视图

 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * @author light
 * @Description 二叉树的右视图
 *
 *
 * 思路:
 * 层序遍历的时候,判断是否遍历到单层的最后面的元素,
 * 如果是,就放进result数组中,随后返回result就可以了。
 * @create 2023-08-15 17:49
 */
public class RightSideViewTest {
	public static void main(String[] args) {
		Integer[] arr={1,2,3,null,5,null,4};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		List<Integer> res=rightSideView(tree2.root);
		System.out.println(res);
	}

	public static List<Integer> rightSideView(TreeNode root) {
		List<Integer> list=new ArrayList<>();
		Deque<TreeNode> que=new ArrayDeque<>();
		if(root==null){
			return list;
		}
		que.offer(root);
		while(!que.isEmpty()){
			int size=que.size();
			while(size>0){
				TreeNode node = que.poll();
				if(size==1){
					list.add(node.val);
				}
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
				size--;
			}
		}
		return list;
	}
}

637. 二叉树的层平均值

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * @author light
 * @Description 二叉树的层平均值
 * @create 2023-08-15 18:23
 */
public class AverageOfLevelsTest {
	public static void main(String[] args) {
		Integer[] arr={3,9,20,null,null,15,7};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		List<Double> res=averageOfLevels(tree2.root);
		System.out.println(res);
	}
	public static List<Double> averageOfLevels(TreeNode root) {
		Deque<TreeNode> que=new ArrayDeque();
        List<Double> list=new ArrayList();
        if(root==null){
            return list;
        }
        que.add(root);
        while(!que.isEmpty()){
            int size=que.size();
            int count=size;
            Double valSum=0.0;
            while((size--!=0)){
                TreeNode node=que.peek();
                valSum+=node.val;
                if(node.left!=null){
                    que.add(node.left);
                }
                if(node.right!=null){
                    que.add(node.right);
                }
                que.remove(); 
            }
            list.add(valSum/count);
        }
        return list;
	}
}

429. N 叉树的层序遍历

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

 这道题按照题目创建n叉树这里我一直有问题,所以就只给出核心代码

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        List<List<Integer>> res=new ArrayList<>();
		if(root==null){
			return res;
		}
		Deque<Node> que=new ArrayDeque<>();
		que.offer(root);
		while(!que.isEmpty()){
			List<Integer> list=new ArrayList<>();
			int size=que.size();
			while (size>0){
				Node node=que.poll();
				list.add(node.val);
				List<Node> children=node.children;
				if(children!=null){
					for(Node n:children){
						que.add(n);
					}
				}
				size--;
			}
			res.add(list);
		}
		return res;
    }
}

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

给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

/**
 * @author light
 * @Description 在每个数行中找到最大值
 *
 *
 * @create 2023-08-15 20:58
 */
public class LargestValuesTest {
	public static void main(String[] args) {
		Integer[] arr={1,3,2,5,3,null,9};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		List<Integer> res=largestValues(tree2.root);
		System.out.println(res);
	}
	public static List<Integer> largestValues(TreeNode root) {
		List<Integer> list=new ArrayList<>();
		Deque<TreeNode> que=new ArrayDeque<>();
		if(root==null){
			return list;
		}
		que.offer(root);
		while(!que.isEmpty()){
			int size=que.size();
			int max=que.peek().val;
			while (size>0){
				TreeNode node=que.poll();
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
				max=max>node.val?max:node.val;
				size--;
			}
			list.add(max);
		}
		return list;
	}
}

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

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

相关文章

sql类型-用户定义表类型

一、创建用户定义表类型String_Table_Type CREATE TYPE String_Table_Type AS TABLE ( Id nvarchar(200) NOT NULL ) GO DECLARE test String_Table_Type INSERT INTO test VALUES(a),(b),(c) SELECT * FROM test 二、SqlSugar中使用

VBA manual

VBA MACRO 修复乱码打开VBAAlt F11File/Options/Customize Ribbon 修复乱码 Tools / Options Control Pannel / Region 打开VBA Alt F11 快速打开VBA File/Options/Customize Ribbon

融云:以对话为场景本质,AIGC 将如何改变游戏规则

8 月 17 日&#xff08;本周四&#xff09;&#xff0c;融云直播课从排查问题到预警风险&#xff0c;社交产品如何更好保障体验、留住用户&#xff1f;欢迎点击报名~ 生成式 AI 公司 MosaicML 以约 13 亿美元的价格被大数据巨头 Databricks 收购&#xff0c;这个发生于 6 月底的…

了解51单片机

目录 51单片机名字的由来 主要功能 1.控制处理 2.数据处理 3.通信 4.定时计数 51单片机的组成 1.中央处理器CPU 2.存储器RAM、只读存储器ROM 3.I/O口和中断系统 4.显示驱动电路、A/D转换器 5.定时器/计数器、脉宽调制电路、模拟多路转换器等电路 单片机的应用领域(…

“探索超前的Pinia:解密Vue.js最新热门状态管理库“

在Vue.js开发者的世界中&#xff0c;一个令人兴奋的新宠儿已经崭露头角&#xff0c;它就是Pinia。对于那些在状态管理方面追求卓越的人来说&#xff0c;Pinia是一片沃土&#xff0c;可以帮助你构建出令人叹为观止的应用程序。无论你是一名有经验的开发者&#xff0c;还是刚入门…

《开放加速规范AI服务器设计指南》发布,应对生成式AI爆发算力挑战

8月10日&#xff0c;在2023年开放计算社区中国峰会(OCP China Day 2023)上&#xff0c;《开放加速规范AI服务器设计指南》&#xff08;以下简称《指南》&#xff09;发布。《指南》面向生成式AI应用场景&#xff0c;进一步发展和完善了开放加速规范AI服务器的设计理论和设计方法…

小白到运维工程师自学之路 第七十五集 (Kubernetes 企业级高可用部署)2

8、添加master节点 在k8s-master2和k8s-master3节点创建文件夹 mkdir -p /etc/kubernetes/pki/etcd在k8s-master1节点执行 从k8s-master1复制密钥和相关文件到k8s-master2和k8s-master3 scp /etc/kubernetes/admin.conf root192.168.77.15:/etc/kubernetes scp /etc/kubernet…

TPAMI, 2023 | 用压缩隐逆向神经网络进行高精度稀疏雷达成像

CoIR: Compressive Implicit Radar | IEEE TPAMI, 2023 | 用压缩隐逆向神经网络进行高精度稀疏雷达成像 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于Nature/Science及其子刊;MobiCom, Sigcom, MobiSy…

〔011〕Stable Diffusion 之 解决绘制多人或面部很小的人物时面部崩坏问题 篇

✨ 目录 &#x1f388; 脸部崩坏&#x1f388; 下载脸部修复插件&#x1f388; 启用脸部修复插件&#x1f388; 插件生成效果&#x1f388; 插件功能详解 &#x1f388; 脸部崩坏 相信很多人在画图时候&#xff0c;特别是画 有多个人物 图片或者 人物在图片中很小 的时候&…

【编织时空二:探究顺序表与链表的数据之旅】

本章重点 链表 链表的结合实现 顺序表和链表的区别和联系 1.链表 顺序表的问题及思考 顺序表的优点&#xff1a; 顺序表中的元素在内存中是连续存储的&#xff0c;因此可以通过索引直接访问任意位置的元素。顺序表尾插尾删操作实现简单。 问题&#xff1a; 中间/头部的插入…

我的创作纪念日+【MySQL】- 08 影响MySQL性能的配置参数

我的创作纪念日【MySQL】- 08 影响MySQL性能的配置参数 写在前面我的创作纪念日 mysql 优化服务器设置1.创建MySQL配置文件2.InnoDB缓冲池&#xff08;Buffer Pool&#xff09;3.线程缓存4.表缓存5.InnoDB I/O配置&#xff08;事务日志&#xff09;6.InnoDB并发配置7.优化排序&…

《电路》基础知识入门学习笔记

文章目录&#xff1a; 一&#xff1a;电路模型和电路规律 1.电路概述 2.电路模型 3.基本电路物理量&#xff1a;电流、电压、电功率和能量 4.电流和电压的参考方向 5.电路元件—电阻 6. 电路元件—电压源和电流源 7.受控电源 8.基尔霍夫&#xff08;后面都要用这个方法…

G1的原理整理

有道云笔记 G1垃圾收集器是JDK7 update 4&#xff08;2011年7月7日&#xff09;引入的一款垃圾收集器&#xff0c;全称Garbage-First Garbage Collector&#xff0c;G1是一个分代的&#xff0c;增量的&#xff0c;并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在…

一篇讲明白,配电柜如何精准监测

当今社会&#xff0c;电力作为现代生活和工业生产中不可或缺的重要能源&#xff0c;扮演着关键的角色。为了确保电力系统的可靠供应和高效运行&#xff0c;配电柜作为电力系统的核心组件之一&#xff0c;具有着重要的地位。 因此&#xff0c;配电柜监控系统在确保稳定的电力供应…

LC-链表的中间节点(双指针)

LC-链表的中间节点&#xff08;双指针&#xff09; 链接&#xff1a;https://leetcode.cn/problems/middle-of-the-linked-list/description/ 描述&#xff1a;给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二…

Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find

问题再现&#xff1a; 2023-08-15 16:51:16,151 DEBUG [reactor-http-nio-2][CompositeLog.java:147] - [dc73b32c-1] Encoding [{timestampTue Aug 15 16:51:16 CST 2023, path/content/course/list, status503, errorService Unavai (truncated)...] 2023-08-15 16:51:16,17…

【广州华锐视点】VR警务教育实训系统模拟真实场景进行实践训练

随着科技的发展&#xff0c;虚拟现实技术在教育领域得到了广泛的应用。VR警务教育实训系统就是其中的一种应用&#xff0c;该系统由广州华锐互动开发&#xff0c;可以模拟真实的警务场景&#xff0c;让学生通过虚拟现实技术进行实践训练&#xff0c;提高学生的实践能力和技能水…

“超越传统的HTTP请求:深度解析Axios,打造前端开发的终极利器“

解锁前端开发的新境界 - 深入探索Axios&#xff0c;构建卓越的互联网应用 在当今数字化世界中&#xff0c;互联网应用的需求日益增长&#xff0c;而无论是大型企业还是初创公司&#xff0c;都需要一个强大而可靠的工具来处理与后端服务器之间的通信。这就是Axios的光辉时刻。作…

53.Linux day03 文件查看命令,vi/vim常用命令

今天进行了新的学习。 目录 1.cat a.查看单个文件的内容&#xff1a; b.查看多个文件的内容&#xff1a; c.将多个文件的内容连接并输出到一个新文件&#xff1a; d.显示带有行号的文件内容&#xff1a; 2.more 3.less 4.head 5.tail 6.命令模式 7.插入模式 8.图…

等保测评标准和规范有哪些?

等保测评标准和规范的出现&#xff0c;为我国信息安全等级保护制度的建立和健全提供了重要的保障。 作为信息安全领域的重要评估标准&#xff0c;等保测评旨在通过对信息系统、网络安全设备和安全产品等的安全性能、安全功能、安全管理、安全控制和安全审计等方面的要求进行检查…