LeetCode ——二叉树篇(三)

news2024/12/23 8:50:35

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

 二叉树的定义及创建见:

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

目录

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

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

 104. 二叉树的最大深度

 111. 二叉树的最小深度

  226. 翻转二叉树

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

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

/*
// 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) {
      Deque<Node> que=new ArrayDeque<>();
		if(root==null){
			return null;
		}
		que.offer(root);
		while(!que.isEmpty()){
			int size=que.size();
			Node preNode=null;
			Node node=null;
			for (int i = 0; i < size; i++) {
				if(i==0){
					//取出本层头部结点
					preNode=que.poll();
					node=preNode;
				}else{
					node=que.poll();
					preNode.next=node;
					preNode=node;
				}
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
			}
			preNode.next=null; //本层最后一个节点指向null
		}
		return root;
    }
}


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

给定一个二叉树:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。

初始状态下,所有 next 指针都被设置为 NULL 。

/*
// 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) {
        Deque<Node> que=new ArrayDeque<>();
		if(root==null){
			return null;
		}
		que.offer(root);
		while(!que.isEmpty()){
			int size=que.size();
			Node preNode=null;
			Node node=null;
			for (int i = 0; i < size; i++) {
				if(i==0){
					//取出本层头部结点
					preNode=que.poll();
					node=preNode;
				}else{
					node=que.poll();
					preNode.next=node;
					preNode=node;
				}
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
			}
			preNode.next=null; //本层最后一个节点指向null
		}
		return root;
    }
}

 104. 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author light
 * @Description 二叉树的最大深度
 *
 * 给定一个二叉树 root ,返回其最大深度。
 * 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。
 * @create 2023-08-16 16:46
 */
public class MaxDepthTest {
	public static void main(String[] args) {
		Integer[] arr={3,9,20,null,null,15,7};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		System.out.println(maxDepth(tree2.root));
	}
	public static int maxDepth(TreeNode root) {
		Deque<TreeNode> que=new ArrayDeque<>();
		if(root!=null){
			que.offer(root);
		}
		int depth=0;
		while(!que.isEmpty()){
			int size=que.size();
			while(size>0){
				TreeNode node=que.poll();
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
				size--;
				if(size==0){
					depth++;
				}
			}
		}
		return depth;
	}
}

 111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author light
 * @Description 二叉树的最小深度
 *
 * 给定一个二叉树,找出其最小深度。
 * 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
 * 说明:叶子节点是指没有子节点的节点。
 * @create 2023-08-16 16:58
 */
public class MinDepthTest {
	public static void main(String[] args) {
		Integer[] arr={3,9,20,null,null,15,7};
		BinaryTree2 tree2=new BinaryTree2(arr); //按数组方式创建二叉树
		System.out.println(minDepth(tree2.root));
	}
	public static int minDepth(TreeNode root) {
		Deque<TreeNode> que=new ArrayDeque<>();
		int depth=0;
		if(root!=null){
			que.offer(root);
			depth++;
		}
		while(!que.isEmpty()){
			int size=que.size();
			while(size>0){
				TreeNode node=que.poll();
				if(node.left==null&&node.right==null){
					return depth;
				}
				if(node.left!=null){
					que.offer(node.left);
				}
				if(node.right!=null){
					que.offer(node.right);
				}
				size--;
				if(size==0){
					depth++;
				}
			}
		}
		return depth;

	}
}

  226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

 

/**
 * 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) {
      Deque<TreeNode> que=new ArrayDeque<>();
			if(root!=null){
				que.offer(root);
			}
			while(!que.isEmpty()){
				int size=que.size();
				while(size>0){
					TreeNode node=que.poll();
					swap(node);
					if(node.left!=null){
						que.offer(node.left);
					}
					if(node.right!=null){
						que.offer(node.right);
					}
					size--;
				}
			}
			return root;
		}
		private  void swap(TreeNode root) {
		TreeNode temp=root.left;
		root.left=root.right;
		root.right=temp;
	}

}

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

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

相关文章

(二)结构型模式:7、享元模式(Flyweight Pattern)(C++实例)

目录 1、享元模式&#xff08;Flyweight Pattern&#xff09;含义 2、享元模式的UML图学习 3、享元模式的应用场景 4、享元模式的优缺点 5、C实现享元模式的简单实例 1、享元模式&#xff08;Flyweight Pattern&#xff09;含义 享元模式&#xff08;Flyweight&#xff09…

企业计算机服务器遭到了locked勒索病毒攻击如何解决,勒索病毒解密

网络技术的不断发展&#xff0c;也为网络安全埋下了隐患&#xff0c;近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器遭到了locked勒索病毒的攻击&#xff0c;导致企业的财务系统内的所有数据被加密无法读取&#xff0c;严重影响了企业的正常运行。最近…

Kubernetes网络组件详解

目录 1、Kubernetes网络组件 1.1、Flannel网络组件 1.2、Calico 网络插件 2、环境准备 2.1、主机初始化配置 2.2、部署docker环境 3、部署kubernetes集群 3.1、组件介绍 3.2、配置阿里云yum源 3.3、安装kubelet kubeadm kubectl 3.4、配置init-config.yaml 3.6、安装…

vscode + python

序 参考链接&#xff1a; 【教程】VScode中配置Python运行环境_哔哩哔哩_bilibili Python部分 Python Releases for Windows | Python.org vscode部分 Visual Studio Code - Code Editing. Redefined 一路next&#xff0c;全部勾上&#xff1a; 就可以了&#xff1a; 安装插…

SpringBoot集成Solr(二)搜索数据

SpringBoot集成Solr&#xff08;二&#xff09;搜索数据 1.1 构建查询条件 //创建 solr查询参数对象 SolrQuery query new SolrQuery(); StringBuilder params new StringBuilder(); params.append(" subject_s:*").append(text).append("*"); params.a…

LVS负载均衡群集部署(LVS-NAT模型实例)

NAT模式 LVS负载均衡群集部署 LVS负载调度器&#xff1a;ens33&#xff1a;192.168.50.22 ens36&#xff1a;10.0.0.1&#xff08;vmnet1&#xff09; Web1 节点服务器1&#xff1a;192.168.50.56 Web2 节点服务器2&#xff1a;192.168.50.57 NFS服务器&#xff1a;192.168.5…

文本图片怎么转Excel?分享一些好用的方法

在处理数据时&#xff0c;Excel 是一个非常强大的工具&#xff0c;但有时候需要将文本和图片转换为 Excel 格式&#xff0c;这可能会让人感到困惑。在本文中&#xff0c;我们将介绍一些好用的方法&#xff0c;以便您能够轻松地将文本和图片转换成 Excel 格式。 将文本图片为Exc…

Mysql安装配置教程(超详细)(C盘、D盘均可安装)

Mysql安装配置教程&#xff08;超详细&#xff09;&#xff08;C盘、D盘均可安装&#xff09; mysql安装配置教程&#xff08;超详细&#xff09;&#xff08;C盘、D盘均可安装&#xff09;0x1 官网下载Mysql下载 0x2 选择安装模式0x3 Developer Default &#xff08;C盘安装&a…

冠达管理:哪里查中报预增?

中报季行将到来&#xff0c;投资者开端重视公司的成绩体现。中报预增是投资者最关心的论题之一&#xff0c;因为这意味着公司未来成绩的增加潜力。但是&#xff0c;怎么查找中报预增的信息呢&#xff1f;本文将从多个视点分析这个问题。 1.证券交易所网站 证券交易所网站是投资…

React18TS项目:配置react-css-modules,使用styleName

他的好处不说了 网上一堆文章一个能打的都没有&#xff0c; 添加开发依赖 pnpm add -D dr.pogodin/babel-plugin-react-css-modules types/react-css-modules Babel Plugin "React CSS Modules" | Dr. Pogodin Studio 看dr.pogodin/babel-plugin-react-css-mo…

css学习3(三种样式表与样式控制优先级)

1、外部样式表&#xff1a;当样式需要应用于很多页面时&#xff0c;外部样式表将是理想的选择。在使用外部样式表的情况下&#xff0c;你可以通过改变一个文件来改变整个站点的外观。每个页面使用 <link> 标签链接到样式表&#xff0c;也要放到<head>中。 2、外部…

30W IP网络有源音箱 校园广播音箱

SV-7042XT是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率30W。同时它可以外接一个30W的无源副音箱&#xff0c;用在面积较大的场所。5寸进口全频低音…

B. The Walkway - 思维

分析&#xff1a; 补题&#xff0c; 首先大体思路就是先算一遍没改变任何点时能够买到的物品&#xff0c;这一步可以通过看两点之间距离&#xff0c;之间能够包含几个d就说明会需要买几次物品&#xff0c;对于两侧边界&#xff0c;可以将左侧设置为1 - d&#xff0c; 因为此时可…

SAP动态安全库存简介

动态安全库存:跑需求计划时,ERP系统按设置的库存方式自动计算出满足一定时间内可保障生产的库存数量 SAP动态安全库存的计算公式:动态安全库存=平均日需求*覆盖范围。 平均日需求=特定时期内的总需求/特定时期内的工作天数 覆盖范围指在没又货物供应的情况下,库存可以维…

arm:day4

1. 实现三盏灯的点亮 .text .global _start_start: led1初始化函数LED_INIT: 1 通过RCC_AHB4_ENSETR寄存器&#xff0c;设置GPIOE F组控制器使能 0x50000A28[5:4]1ldr r0,0X50000A28ldr r1,[r0]orr r1,r1,#(0X3<<4)str r1,[r0] 2.1 通过GPIOE_MODER寄存器&#xff0c;…

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)F题题解

文章目录 [Cans and Openers](https://atcoder.jp/contests/abc312/tasks/abc312_f)问题建模问题分析1.分析每种物品的优先级2.分析最终选取物品与每种物品的关系代码 Cans and Openers 问题建模 给定n个物品&#xff0c;物品里有三种&#xff0c;第一种可以直接选取&#xff…

VGG分类实战:猫狗分类

关于数据集 数据集选择的是Kaggle上的Cat and Dog&#xff0c;猫狗图片数量上达到了上万张。你可以通过这里进入Kaggle下载数据集Cat and Dog | Kaggle。 在我的Github仓库当中也放了猫狗图片各666张。 VGG网络 VGG的主要特点是使用了一系列具有相同尺寸 3x3 大小的卷积核进…

Dodaf架构的学习分享

一.Dodaf的内容 Dodaf的背景 DODAF&#xff08;Department of Defense Architecture Framework&#xff09;起源于美国国防部&#xff0c;是一个用于支持复杂系统设计、规划和实施的架构框架。以下是DODAF的背景和起源&#xff1a; 复杂系统需求&#xff1a;在军事和国防领域&…

VS2019生成的DLL,给QT(MinGW版本)使用的小结

VS2019端&#xff1a; a 基于生成一个DLL的工程&#xff08;要注意生成是x86&#xff0c;还是x64的&#xff0c;需要和后面的QT的App工程对应&#xff09;&#xff0c;这里不多解释了&#xff0c;网上多的是&#xff1b; b 在cpp实现文件里&#xff0c;假如要导出一个这样的…

Vue 项目运行 npm install 时,卡在 sill idealTree buildDeps 没有反应

解决方法&#xff1a;切换到淘宝镜像。 以下是之前安装的 xmzs 包&#xff0c;用于控制切换淘宝镜像。 该截图是之前其他项目切换淘宝镜像的截图。 切换镜像后&#xff0c;顺利执行 npm install 。