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

目录

模版

先序遍历

中序遍历

后序遍历

力扣原题 相同的二叉树

力扣原题 翻转二叉树

遍历树的层数

题目

静态变量

核心逻辑


模版

    // 二叉树
    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();
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

P6周:VGG-16算法-Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境 语言环境&#xff1a;Python 3.8.12 编译器&#xff1a;jupyter notebook 深度学习环境&#xff1a;torch 1.12.0cu113 一、前期准备 1.设置GPU im…

Ubuntu、Windows系统网络设置(ping通内外网)

一、 虚拟机VMware和Ubuntu系统的网络配置说明 1、虚拟机的网络适配器的模式有三种&#xff1a; 桥接模式NAT模式主机模式 2、虚拟机VMware的网卡配置(如何进行配置界面(虚拟机->设置)) 注意&#xff1a; 1、以上桥接模式(ubuntu有独立IP)、NAT模式(没有独立IP)都可以联…

Web端实时播放RTSP视频流(监控)

一、安装ffmpeg: 1、官网下载FFmpeg: Download FFmpeg 2、点击Windows图标,选第一个:Windows builds from gyan.dev 3、跳转到下载页面: 4、下载后放到合适的位置,不用安装,解压即可: 5、配置path 复制解压后的\bin路径,配置环境变量如图: <

Mongodb相关内容

Mongodb相关内容 1、Windows平台安装2、Linux平台安装3、基本常用命令文档更新删除文档分页查询索引 pymongo操作 客户端下载&#xff1a;https://download.csdn.net/download/guoqingru0311/90273435 1、Windows平台安装 方式一&#xff1a; 方式2&#xff1a; 方式3&#…

SQL2000在win10上安装的方法

安装前最好先关闭防火墙和一些杀毒软件&#xff0c;因为这些软件在安装过程中可能会碰到注册表等一下杀毒软件比较敏感的地带&#xff0c;如果违反杀毒软件的规则会被当做病毒强行终止删除 首相找到C盘下window文件中的sysWOW64文件 鼠标右键&#xff0c;点击属性、安全、高级 …

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…

【华为路由/交换机的ftp文件操作】

华为路由/交换机的ftp文件操作 PC&#xff1a;10.0.1.1 R1&#xff1a;10.0.1.254 / 10.0.2.254 FTP&#xff1a;10.0.2.1 S1&#xff1a;无配置 在桌面创建FTP-Huawei文件夹&#xff0c;里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server&#xff0c;…

Web前端开发技术之HTMLCSS知识点总结

学习路线 一、新闻网界面1. 代码示例2. 效果展示3. 知识点总结3.1 HTML标签和字符实体3.2 超链接、颜色描述与标题元素3.3 关于图片和视频标签&#xff1a;3.4 CSS引入方式3.5 CSS选择器优先级 二、flex布局1. 代码示例2. 效果展示3. 知识点总结3.1 span标签和flex容器的区别3.…

基于SSM汽车美容管家【提供源码+答辩PPT+文档+项目部署】(高质量源码,可定制,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

idea gradle compiler error: package xxx does not exist

idea 编译运行task时报项目内的包不存在&#xff0c;如果你试了网上的其它方法还不能解决&#xff0c;应该是你更新了新版idea&#xff0c;项目用的是旧版jdk&#xff0c;请在以下编译器设置中把项目JDK字节码版本设为8&#xff08;jdk1.8&#xff0c;我这里是17请自行选择&…

1.17学习

crypto nssctf-[SWPUCTF 2021 新生赛]crypto8 不太认识这是什么编码&#xff0c;搜索一下发现是一个UUENCODE编码&#xff0c;用在线工具UUENCODE解码计算器—LZL在线工具解码就好 misc buuctf-文件中的秘密 下载附件打开后发现是一个图片&#xff0c;应该是一个图片隐写&…

Formality:参考设计/实现设计以及顶层设计

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482​​​ Formality存在两个重要的概念&#xff1a;参考设计/实现设计和顶层设计&#xff0c;本文就将对此进行详细阐述。参考设计/实现设计是中两个重要的全局概念&am…

Spring Web MVC综合案例

承接上篇文章——Spring Web MVC探秘&#xff0c;在了解Spring Web MVC背后的工作机制之后&#xff0c;我们接下来通过三个实战项目&#xff0c;来进一步巩固一下前面的知识。 一、计算器 效果展示&#xff1a;访问路径&#xff1a;http://127.0.0.1:8080/calc.html 前端代码&a…

C# 25Dpoint

C# 25Dpoint &#xff0c;做一个备份 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace _25Dpoint {public partial cl…

初识Modbus

初识Modbus Modbus TCP协议前置知识TCP三次握手&#xff1a;数据传输确认&#xff1a;四次挥手 Modbus TCP协议 Modbus协议是一种应用层的报文传输协议 分三种传输方式 RTUASCIITCP 前置知识 TCP协议&#xff0c;UDP协议都是工作在传输层&#xff0c;用与程序之前的数据传…

43.Textbox的数据绑定 C#例子 WPF例子

固定最简步骤&#xff0c;包括 XAML&#xff1a; 题头里引入命名空间 标题下面引入类 box和block绑定属性 C#&#xff1a; 通知的类&#xff0c;及对应固定的任务 引入字段 引入属性 属性双触发&#xff0c;其中一个更新block的属性 block>指向box的属性 从Textbo…

【0x02】HCI_Inquiry_Result事件详解

目录 一、事件概述 1.1. 事件参数 1.2. 事件描述 1.3. 与查询过程的关联 1.4. 相关事件对比 二、事件内容 2.1. HCI_Inquiry_Result事件格式 2.2. Num_Responses 2.3. BD_ADDR[i] 2.4. Page_Scan_Repetition_Mode[i] 2.5. Reserved[i] 2.6. Class_Of_Device[i] 2…

[c语言日寄](bit)位检查——初探字节之下

哈喽大家好啊&#xff0c;在今天的快乐刷题中&#xff0c;我遇到了一个很有意思的题目&#xff1a; 题目 统计二进制中1的个数 基本思路 没错……这道题的对象比较特殊。 不同于过去常见的题目&#xff0c;之前的题目的对象都是基本数据类型&#xff0c;而这道题的对象却是…

音频语言模型与多模态体系结构

音频语言模型与多模态体系结构 多模态模型正在创造语言、视觉和语音等以前独立的研究领域的协同效应。这些模型使用通用架构,将每种模式视为不同的“token”,使它们能够以一种与人类认知非常相似的方式联合建模和理解世界。 ​ ​可以将多模态分为两个主要领域:输入空间(…

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…