Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数

news2025/1/18 18:36:39

目录

模版

先序遍历

中序遍历

后序遍历

力扣原题 相同的二叉树

力扣原题 翻转二叉树

遍历树的层数

题目

静态变量

核心逻辑


模版

    // 二叉树
    public static class Node{
    	public int value;
    	public Node left;
    	public Node right;
    	public Node(int v) {
    		value=v;
    	}
    }

先序遍历

根节点 左孩子节点 右孩子节点

中序遍历

左孩子节点 根节点 右孩子节点

后序遍历

左孩子节点 右孩子节点 根节点

力扣原题 相同的二叉树

100. 相同的树 - 力扣(LeetCode)

/**
 * 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 isSameTree(TreeNode p, TreeNode q) {
        
        if(p==null && q!=null){
            return false;
        }

        if(p!=null && q==null){
            return false;
        }

        if(p==null && q==null){
            return true;
        }
        // 都不为空
        return p.val==q.val && isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    }
}

力扣原题 翻转二叉树

/**
 * 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 flipTree(TreeNode root) {
        if(root == null) return null;
        TreeNode tmp = root.left;
        root.left = flipTree(root.right);
        root.right = flipTree(tmp);
        return root;
    }
}

遍历树的层数

题目

静态变量

核心逻辑

import java.util.*;
import java.math.*;
import java.time.*;
import java.io.*;
import java.util.regex.*;
 
// Eclipse IDE 2020 08
// OpenJDK 1.8
// 下方网页是个人主页
// http://gczdy.cn
 
/*
                                   .-'''-.     
_______     _______               '   _    \   
\  ___ `'.  \  ___ `'.          /   /` '.   \  
 ' |--.\  \  ' |--.\  \        .   |     \  '  
 | |    \  ' | |    \  '       |   '      |  ' 
 | |     |  '| |     |  '      \    \     / /  
 | |     |  || |     |  | _    _`.   ` ..' /   
 | |     ' .'| |     ' .'| '  / |  '-...-'`    
 | |___.' /' | |___.' /'.' | .' |              
/_______.'/ /_______.'/ /  | /  |              
\_______|/  \_______|/ |   `'.  |              
                       '   .'|  '/             
                        `-'  `--'              
*/
 
/**
 * 
 * @Author Dduo
 * @Date 2025-01-10
 */
public class Main {
	
//    普通流
//    static Scanner sc = new Scanner(System.in);
    
//    数据流快读模板(类似于C++的IOS)
    static Read sc=new Read();
    
//    时间类 用来测试运行时间
    static Instant START=Instant.now();
    
    static long MOD = (long) (1e9 + 7);
    static int[] dx = {0, 0, 1, -1, 1, -1, 1, -1};
    static int[] dy = {1, -1, 0, 0, -1, -1, 1, 1};
    private static final int[] DIRECTIONS = {-1, 0, 1, 0, -1};
    
    /**
     *
     * @param args
     * @return
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
 
        int t = 1;
//        t = sc.nextInt();
        
//      预处理
        preconditioning();
        
        while (t-- > 0) {
            solve();
        }
        
//   	 	sc.close();
//			dduoln("运行时间 : "+Duration.between(START,Instant.now()).toMillis()+"ms");
        return;
    }
    
//    输出流  
    static <T> void dduoln(T t) {
    	System.out.println(t);
    }
    
    static <T> void dduo(T t) {
    	System.out.print(t);
    }
    
    
//  预处理
    static void preconditioning() {
	
    }
    
//    数据结构模板 二叉树 by Dduo
    static class Node{
    	public int value;
    	public Node left;
    	public Node right;
     	public Node() {}
    	public Node(int v) {
    		value=v;
    	}
    }
    
//    静态变量
    static Node[] a = new Node[1000010];
    static int cnt=0;
    
//    核心代码逻辑
    static void solve() throws Exception { 	
    	// 构造二叉树
    	int n=sc.nextInt();
    	for(int i=1;i<=n;i++) {
    		a[i]=new Node(i);
    		int l=sc.nextInt();
    		int r=sc.nextInt();
            if (l != 0) {
                a[i].left = new Node(l);
            }
            if (r != 0) {
                a[i].right = new Node(r);
            }
    	}
    	dfs(a[1],1);
    	dduoln(cnt);
    }
    
    static void dfs(Node node,int max){
//    	   System.out.println("Visiting Node " + node.value + " at depth " + max);
    	 // 判断当前节点是否是叶子节点(即左右子节点都为null)
        if (node.left == null && node.right == null) {
            cnt = Math.max(cnt, max);
            return; 
        }
        // 遍历左子树
        if (node.left != null) {
            dfs(a[node.left.value], max + 1);
        }
        // 遍历右子树
        if (node.right != null) {
            dfs(a[node.right.value], max + 1);
        }
    }
    
    
    // 快速幂模版 by Dduo
    static long pow(long a, long b) {
        if (b == 0) return 1;
        if (b == 1) return a;
         
        try {
            long result = 1;
            while (b > 0) {
                if ((b & 1) == 1) {
                    if (result > Long.MAX_VALUE / a) return Long.MAX_VALUE;
                    result *= a;
                }
                b >>= 1;
                if (b > 0) {
                    if (a > Long.MAX_VALUE / a) return Long.MAX_VALUE;
                    a *= a;
                }
            }
            return result;
        } catch (Exception e) {
            return Long.MAX_VALUE;
        }
    }
}
 
// 数据结构模版 并查集 by Dduo
class UnionFind {
    private int[] parent;
    private int[] size;
    // 初始化并查集
    public UnionFind(int n) {
        parent = new int[n + 1]; // 因为编号从 1 到 N,所以数组大小是 N+1
        size = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            parent[i] = i; // 每个元素的父节点初始为自己
            size[i] = 1;   // 每个元素的初始大小为 1
        }
    }
    // 查找元素 x 所在的集合,带路径压缩优化
    public int find(int x) {
        if (parent[x] != x) {
            parent[x] = find(parent[x]);  // 路径压缩
        }
        return parent[x];
    }
    // 合并两个集合 带按秩合并优化
    public void union(int x, int y) {
        int rootX = find(x);
        int rootY = find(y);
 
        if (rootX != rootY) {
            // 按秩合并 较小的树合并到较大的树上
            if (size[rootX] < size[rootY]) {
                parent[rootX] = rootY;
                size[rootY] += size[rootX];
            } else {
                parent[rootY] = rootX;
                size[rootX] += size[rootY];
            }
        }
    }
 
    // 判断 x 和 y 是否在同一个集合中
    public boolean connected(int x, int y) {
        return find(x) == find(y);
    }
}
 
// 数据流快读模板(类似于C++的IOS) by Dduo
class Read{
    BufferedReader bf;
    StringTokenizer st;
    BufferedWriter bw;
    public Read(){
        bf=new BufferedReader(new InputStreamReader(System.in));
        st=new StringTokenizer("");
        bw=new BufferedWriter(new OutputStreamWriter(System.out));
    }
//    以下为输入部分:
    public String nextLine() throws IOException{
        return bf.readLine();
    }
    public String next() throws IOException{
        while(!st.hasMoreTokens()){
            st=new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }
    public char nextChar() throws IOException{
        //确定下一个token只有一个字符的时候再用
        return next().charAt(0);
    }
    public int nextInt() throws IOException{
        return Integer.parseInt(next());
    }
    public long nextLong() throws IOException{
        return Long.parseLong(next());
    }
    public double nextDouble() throws IOException{
        return Double.parseDouble(next());
    }
    public float nextFloat() throws IOException{
        return Float.parseFloat(next());
    }
    public byte nextByte() throws IOException{
        return Byte.parseByte(next());
    }
    public short nextShort() throws IOException{
        return Short.parseShort(next());
    }
    public BigInteger nextBigInteger() throws IOException{
        return new BigInteger(next());
    }
    public BigDecimal nextDecimal() throws IOException{
        return new BigDecimal(next());
    }
//    以下为输出部分:
    public void println(int a) throws IOException{
        print(a);
        println();
        return;
    }
    public void print(int a) throws IOException{
        bw.write(String.valueOf(a));
        return;
    }
    public void println(String a) throws IOException{
        print(a);
        println();
        return;
    }
    public void print(String a) throws IOException{
        bw.write(a);
        return;
    }
    public void println(long a) throws IOException{
        print(a);
        println();
        return;
    }
    public void print(long a) throws IOException{
        bw.write(String.valueOf(a));
        return;
    }
    public void println(double a) throws IOException{
        print(a);
        println();
        return;
    }
    public void print(double a) throws IOException{
        bw.write(String.valueOf(a));
        return;
    }
    public void print(BigInteger a) throws IOException{
        bw.write(a.toString());
        return;
    }
    public void print(char a) throws IOException{
        bw.write(String.valueOf(a));
        return;
    }
    public void println(char a) throws IOException{
        print(a);
        println();
        return;
    }
    public void println() throws IOException{
        bw.newLine();
        return;
    }
//    其他调试命令:
    public void flush() throws IOException{
//      交互题分组调试,或者提前退出的情况下可以先运行此语句再推出
        bw.flush();
        return;
    }
    public boolean hasNext() throws IOException{
//      本地普通IDE难以使用这个方法调试,需要按照数据组flush,刷新语句:
//      sc.flush()
//      调试完可删去
        return bf.ready();
    }
}

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

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

相关文章

【Mysql进阶知识】Mysql 程序的介绍、选项在命令行配置文件的使用、选项在配置文件中的语法

目录 一、程序介绍 二、mysqld--mysql服务器介绍 三、mysql - MySQL 命令行客户端 3.1 客户端介绍 3.2 mysql 客户端选项 指定选项的方式 mysql 客户端命令常用选项 在命令行中使用选项 选项(配置)文件 使用方法 选项文件位置及加载顺序 选项文件语法 使用举例&am…

ESP32云开发二( http + led + lcd)

文章目录 前言先上效果图platformio.iniwokwi.tomldiagram.json源代码编译编译成功上传云端完结撒花⭐⭐⭐⭐⭐ 前言 阅读此篇前建议先看 此片熟悉下wokwi https://blog.csdn.net/qq_20330595/article/details/144289986 先上效果图 Column 1Column 2 platformio.ini wokwi…

医疗集群系统中基于超融合数据库架构的应用与前景探析

一、引言 1.1 研究背景与意义 随着医疗信息化的飞速发展,医疗数据呈爆炸式增长。从日常诊疗记录、患者病历,到各类医疗影像、检查检验数据等,海量信息不断涌现。据统计,医疗数据的年增长率高达 30% 以上 ,2025 年,全球医疗数据量将达到 2314 艾字节(EB)。如此庞大的数…

Flask学习入门笔记

Flask学习入门笔记 前言1. 安装Flask2. 创建一个简单的Flask应用3. 路由与视图函数3.1 基本路由3.2 动态路由3.3 HTTP方法 4. 请求与响应4.1 获取请求数据4.2 返回响应 5. 模板渲染5.1 基本模板渲染5.2 模板继承 6. 静态文件6.1 静态文件的目录结构6.2 在模板中引用静态文件6.2…

Java File、IO流、字节输入流 、字节输出流 、字符输入流 、字符输入流 、缓冲流、转换流、打印流、数据流、序列化流、IO框架

一. File File是Java.io.包下的类&#xff0c;File类的对象用于代表当前操作系统的文件/文件夹 File类只能对文件本身进行操作&#xff0c;不能读写文件里面存储的数据。 1. 创建对象 构造器说明public File(String pathname)根据文件路径创建文件对象public File(String pare…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…

Linux -- 初识HTTP协议

目录 什么是HTTP协议 什么是 URL &#xff1f; 理解 URL 初识HTTP 请求与响应格式 代码验证 gitee HTTP.hpp 结果 什么是HTTP协议 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;主要用于客户端&#xff08;通常是浏览器&#…

重返未来1999梁月养成攻略 雷电云手机速刷养成材料

在重返未来1999这款游戏中&#xff0c;1月16日上新的版本中新春限定角色【梁月】已经火热上线&#xff0c;今天就给大家一些养成攻略。 1.梁月是一名可适配多种体系的输出位角色&#xff0c;同时自身还有免疫和全队减伤&#xff0c;可以提升队伍的生存能力&#xff0c;比较推荐…

Pytorch|YOLO

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、 前期准备 1. 设置GPU 如果设备上支持GPU就使用GPU,否则使用CPU import torch import torch.nn as nn import torchvision.transforms as transforms im…

ASP.NET Core 中,认证(Authentication)和授权(Authorization)

在 ASP.NET Core 中&#xff0c;认证&#xff08;Authentication&#xff09;和授权&#xff08;Authorization&#xff09;是两个非常重要的概念。它们确保用户能够安全地访问应用程序&#xff0c;并且在访问过程中能按其权限被正确地控制。接下来&#xff0c;我将详细解释这两…

ThinkPHP 8的一对多关联

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…

基于SpringBoot+Vue的药品管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的药品管理系统采用前后端分离的架构方式&#xff0c;系统实现了用户登录、数据中心、药库管理、药房管理、物资管理、挂号管理、系统管理、基础设置等功能模块。 技术选型 开发工具&#xff1a;idea2020.3Webstorm2020.3 运行环境&#xff…

tomcat状态一直是Exited (1)

docker run -di -p 80:8080 --nametomcat001 你的仓库地址/tomcat:9执行此命令后tomcat一直是Exited(1)状态 解决办法&#xff1a; 用以下命令创建运行 docker run -it --name tomcat001 -p 80:8080 -d 你的仓库地址/tomcat:9 /bin/bash最终结果 tomcat成功启动

递归40题!再见递归

简介&#xff1a;40个问题&#xff0c;有难有易&#xff0c;均使用递归完成&#xff0c;需要C/C的指针、字符串、数组、链表等基础知识作为基础。 1、数字出现的次数 由键盘录入一个正整数&#xff0c;求该整数中每个数字出现的次数。 输入&#xff1a;19931003 输出&#xf…

《leetcode-runner》【图解】【源码】如何手搓一个debug调试器——架构

前文&#xff1a; 《leetcode-runner》如何手搓一个debug调试器——引言 文章目录 设计引入为什么这么设计存在难点1. 环境准备2. 调试程序 仓库地址&#xff1a;leetcode-runner 本文主要聚焦leetcode-runner对于debug功能的整体设计&#xff0c;并讲述设计原因以及存在的难点…

PyTorch使用教程(1)—PyTorch简介

PyTorch是一个开源的深度学习框架&#xff0c;由Facebook人工智能研究院&#xff08;FAIR&#xff09;于2016年开发并发布&#xff0c;其主要特点包括自动微分功能和动态计算图的支持&#xff0c;使得模型建立更加灵活‌。官网网址&#xff1a;https://pytorch.org。以下是关于…

用LLM做测试驱动开发:有趣又高效的尝试

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 &#xff1a; 选择类型 1&#xff1a; 将当前的工程打包成IP 2&#xff1a; 将当前的BD工程打包成IP 3&#xff1a; 将指定的源码打包成IP 4&#xff1a; 创建一个新的AXI 接口IP 其中3和4是比较常用的&#xff0c;本次…

国家统计局湖北调查总队副总队长张小青一行调研珈和科技农业遥感调查智能化算法

1月15日上午&#xff0c;国家统计局湖北调查总队党组成员、副总队长张小青一行莅临珈和科技开展调研。调研期间&#xff0c;张小青一行实地了解了珈和科技在自动化作物分布提取技术领域的最新成果&#xff0c;深入探讨了作物自动化处理模型在农业调查上应用的创新价值及优化方向…

基于微信小程序的电子点菜系统设计与实现(KLW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…