当前位置: 首页 > news >正文

二叉树的遍历 Java

二叉树的遍历

  • 递归法
    • 前序遍历
    • 中序遍历
    • 后序遍历
    • 改进
  • 迭代法
    • 前序、后序遍历
    • 中序遍历
  • Java 中 null、NULL、nullptr 区别

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;}
}

递归法

前序、中序、后序怎么区分?
前、中、后其实描述的是,根节点(一颗树有左子树、根节点、右子树)的访问时间。
前序遍历:根节点->左子树->右子树。
中序遍历:左子树->根节点->右子树。
后序遍历:左子树->右子树->根节点。

LeetCode题目:144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历。

前序遍历

class Solution {List<Integer> mylist = new ArrayList<Integer>();public List<Integer> preorderTraversal(TreeNode root) {if(root == null) return mylist;mylist.add(root.val);preorderTraversal(root.left);preorderTraversal(root.right);return mylist;}
}

在这里插入图片描述

中序遍历

class Solution {List<Integer> mylist = new ArrayList<Integer>();public List<Integer> inorderTraversal(TreeNode root) {if(root == null) return mylist;inorderTraversal(root.left);mylist.add(root.val);inorderTraversal(root.right);return mylist;}
}

在这里插入图片描述

后序遍历

class Solution {List<Integer> mylist = new ArrayList<Integer>();public List<Integer> postorderTraversal(TreeNode root) {if(root == null) return mylist;postorderTraversal(root.left);postorderTraversal(root.right);mylist.add(root.val);return mylist;}
}

在这里插入图片描述

改进

以前序遍历为例,以下是代码随想录的代码。

class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<Integer>();preorder(root, result);return result;}public void preorder(TreeNode root, List<Integer> result) {if (root == null) {return;}result.add(root.val);preorder(root.left, result);preorder(root.right, result);}
}

迭代法

以下是笔记,from 代码随想录

编程语言实现递归的逻辑,是用栈这种数据结构实现的。

前序、后序遍历

注意,栈操作中,判断是否为空的方法,有两个,isEmpty 和 empty 都可以。

前序:
前序遍历是 根左右,所以压入栈的顺序应该是右、左

class Solution {public List<Integer> preorderTraversal(TreeNode root) {Stack<TreeNode> s = new Stack<>();List<Integer> ans = new  ArrayList<Integer>();if(root == null) return ans;else s.push(root);while(!s.isEmpty()) {TreeNode tmp = s.pop();ans.add(tmp.val);if(tmp.right != null) s.push(tmp.right);if(tmp.left != null) s.push(tmp.left);}return ans;}
}

在这里插入图片描述
后序:
前序遍历顺序是 根左右,后续是左右根,只需要把上文中的前序遍历的顺序变成 根右左,然后反转结果数组/list就可以。

反转的方法: Collections.reverse(ans);

class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> ans = new ArrayList<>();if(root == null) return ans;Stack<TreeNode> stack = new Stack<>();stack.push(root);while(!stack.isEmpty()) {TreeNode tmp = stack.pop();ans.add(tmp.val);if(tmp.left != null) stack.push(tmp.left);if(tmp.right != null) stack.push(tmp.right);}Collections.reverse(ans);return ans;}
}

在这里插入图片描述

中序遍历

中序遍历的访问顺序和处理顺序是不一样的。一棵树,是从根节点开始访问的。前序遍历的根左右顺序保证了访问顺序和处理顺序相同。
但是中序遍历的顺序是左根右。

Java 中 null、NULL、nullptr 区别

(1)NULL 不是 Java 中的关键字
在这里插入图片描述
(2)nullptr 不是 Java 中的关键字
在这里插入图片描述

(3)在 Java 中,null 表示“没有值”或“空”。它是一个关键字,用于表示一个对象变量不引用任何对象。这意味着该变量没有指向任何有效的内存地址

相关文章:

二叉树的遍历 Java

二叉树的遍历 递归法前序遍历中序遍历后序遍历改进 迭代法前序、后序遍历中序遍历 Java 中 null、NULL、nullptr 区别 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, Tree…...

数据结构之str类

str类 str 是字符串类。str 大概是 Python 中除了int 之外最基本、最常用的数据类型&#xff0c;在Java与其他语言里基本叫做String&#xff0c;其用途广泛&#xff0c;随处可见&#xff0c;但是要记住一点&#xff0c;字符串是不允许修改的。不过&#xff0c;我们仍然可以对其…...

Java电影购票小程序在线选座订票电影

Java电影购票小程序 功能&#xff1a;注册用户可已查看电影场次评价选座订票退票&#xff0c;影院管理员可以排片退款在线卖票和管理演播室等。超级管理员可管理电影排片电影院用户管理等。 演示视频 小程序&#xff1a; https://www.bilibili.com/video/BV11W4y1A7mK/?shar…...

24-1-9 bilibilic++音视频

下午两点面试&#xff0c;面试官迟到了一会&#xff0c;面试官人很好&#xff0c;整体面试经历很不错&#xff0c;但是我人太紧张了&#xff0c;基础知识掌握的深度不够&#xff0c;没有深挖&#xff0c; 是做音视频的底层相关的&#xff0c; 实习要求只要每天打卡够九个小时就…...

备案(三)

首次备案需要多少天 备案初审&#xff1a;您提交初审后&#xff0c;天翼云会在一个工作日内进行审核&#xff0c;并通过短信和邮件形式通知审核结果。 管局审核&#xff1a;各地通管局审核时间不同&#xff0c;一般为1到20个工作日&#xff0c;审核结果将以短信和邮件形式通知…...

Hotspot源码解析-第十九章-ClassLoaderData、符号表、字符串表的初始化

第十九章-ClassLoaderData初始化 讲解本章先从一张图开始 众所周知&#xff0c;Java类的相关信息都是存储在元空间中的&#xff0c;但是是怎么存储的&#xff0c;相信很多读者是不清楚的&#xff0c;这里就不得不涉及到ClassLoaderDataGraph、classLoader、classLoaderData&…...

impala元数据自动刷新

一.操作步骤 进入CM界面 > Hive > 配置 > 搜索 启用数据库中的存储通知(英文界面搜索&#xff1a;Enable Stored Notifications in Database)&#xff0c;并且勾选&#xff0c;注意一定要勾选&#xff0c;配置后面的配置不生效。数据库通知的保留时间默认为2天&#…...

骑砍战团MOD开发(35)-射击精度系统

一.射击精度 和CF等FPS射击类游戏一样,为了模拟实际射击过程中弓箭,子弹等投掷物的射击偏移,故设计精度系统控制不同武器不同兵种的使用武器能力,统称为游戏精度系统. 由于骑砍可以在马上进行射击,故引擎内部也内置了骑射技能点以便控制玩家在骑马过程中射击的能力. 武器精度:通…...

树莓派非常实用的程序-3 vcdbg

vcdbg 是一个应用程序&#xff0c;用于帮助从在ARM上运行的Linux调试VideoCore GPU。它需要以根用户身份运行。此应用程序主要用于Raspberry Pi工程师&#xff0c;尽管有一些命令一般用户可能会发现有用。 sudo vcdbg help 将给出可用命令的列表。 NOTE 仅列出了最终用户使用…...

jmeter分布式服务搭建

目录 一、环境准备 二、 安装包下载 三 、安装jdk 四 、控制机安装 4.1 解压压缩包 4.2 修改 bin/jmeter.properties 4.3 修改 bin/system.properties 五、执行机安装 5.1 解压安装包 5.2 修改 bin/jmeter.properties 5.3 修改 bin/system.properties 5.4 启动执行机 …...

vue中el-radio无法默认选中

页面上不生效&#xff0c;默认什么都不选中 <el-radio-group v-model"queryParams.videoUrlType"><el-radio :label"1">本地上传</el-radio><el-radio :label"2">外部链接</el-radio> </el-radio-group>da…...

分布式I/O应用于智慧停车场的方案介绍

客户案例背景 目前车位检测技术有磁电技术、超声波技术、红外线技术、图像识别车位技术。考虑到例如电磁干扰、信号干扰等的环境因素影响&#xff0c;通常会采用组合使用的方式进行&#xff0c;如采用不同的传感器、应用不同的协议等&#xff0c;以便提高车位检测的准确性和实时…...

node后端+vue前端实现接口请求时携带authorization验证

node后端vue前端实现接口请求时携带authorization验证 我们在写web项目时&#xff0c;后端写好接口&#xff0c;前端想要调用后端接口时&#xff0c;除了登录注册页面&#xff0c;所有的请求都需要携带authorization&#xff0c;这样是为了避免随意通过接口调取数据的现象发生…...

SourceTree管理git

SourceTree管理git...

【数模百科】一篇文章讲清楚灰色预测模型GM(1,1)附python代码

本篇文章摘录自GM(1,1) - 数模百科 &#xff0c;如果想了解更多有关灰色预测模型的信息&#xff0c;请移步 灰色预测模型 - 数模百科 首先&#xff0c;“灰色”这个词在这里不是指颜色&#xff0c;而是形容一种信息状态&#xff0c;介于黑&#xff08;信息全无&#xff09;和白…...

openssl3.2 - 官方demo学习 - mac - hmac-sha512.c

文章目录 openssl3.2 - 官方demo学习 - mac - hmac-sha512.c概述笔记END openssl3.2 - 官方demo学习 - mac - hmac-sha512.c 概述 MAC算法为HMAC, 设置参数(摘要算法为SHA3-512), 用key初始化, 对明文做MAC数据. 笔记 /*! \file hmac-sha512.c \note openssl3.2 - 官方demo…...

pycharm的使用技巧

1.新建文件时,自动生成代码 settings->editor->file and code templates,选择python script ${NAME} 文件名 ${DATE} 日期 2.自动补齐自定义段落 settings->editor->live templates,在右侧点击+号,添加自定义的内容 完成之后,在下方勾选python 3.修改注释的…...

如何通过内网穿透实现公网访问Portainer管理监控Docker容器

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风…...

Redis原理篇(Dict的收缩扩容机制和渐进式rehash)

Dict&#xff08;即字典&#xff09; Redis是一种键值型数据库&#xff0c;其中键与值的映射关系就是Dict实现的。 Dict通过三部分组成&#xff1a;哈希表&#xff08;DictHashTable&#xff09;&#xff0c;哈希节点(DictEntry)&#xff0c;字典&#xff08;Dict&#xff09…...

Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件

Microsoft Remote Desktop 是一款专为 Mac 用户设计的远程桌面工具&#xff0c;它可以帮助用户通过网络连接到其他计算机&#xff0c;实现远程控制和操作。 软件下载&#xff1a;Microsoft Remote Desktop for Mac 中文正式版下载 该工具支持多种远程连接协议&#xff0c;包括 …...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...