leetcode二叉树相关题目

目录

  • 二叉树的建立
    • 整数数组转二叉树
    • Object数组转二叉树
  • 二叉树的遍历
      • leetcode94.二叉树的中序遍历
      • leetcode144.二叉树的前序遍历

二叉树的建立

整数数组转二叉树

下面只是一个简单的示例,没考虑某个子树为空的情况。把{1, 2, 3, 21, 22, 31, 32} 转变为一个二叉树。

import java.util.ArrayList;
import java.util.List;public class TreeTest {//tree structpublic static 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;}}public static void main(String[] args) {int[] a = {1, 2, 3, 21, 22, 31, 32};//最终循环体执行的是节点,而不是整数值,所以要先把数组转为节点列表,然后遍历List<TreeNode> list = new ArrayList<>();for (int i = 0; i < a.length; i++) {TreeNode t = new TreeNode(a[i]);list.add(t);}for (int i = 0; i < list.size(); i++) {//增加判空,因为可能只有左子树,或者只有右子树if (2 * i + 1 < list.size() && list.get(2 * i + 1) != null) { list.get(i).left = list.get(2 * i + 1);}if (2 * i + 2 < list.size() && list.get(2 * i + 2) != null) {list.get(i).right = list.get(2 * i + 2);}}printNode(list.get(0));}public static void printNode(TreeNode n) { //先序输出if (n != null) {System.out.print(" " + n.val);printNode(n.left);printNode(n.right);}}
}

输出结果:

 1 2 21 22 3 31 32

Object数组转二叉树

要考虑某个节点为空的情况,如下图,数组表示为[1,null,2,null,null,3,null],就要使用Object数组。

在leetcode94题中,上图用数组表示为[1,null,2,3],这种表示是不严谨的。不必要纠结这个点,理解根据数组创建二叉树的原理,能自己创建二叉树就好。后面学到二叉树的序列化,再分析。

import java.util.ArrayList;
import java.util.List;public class TreeTest2 {//tree structpublic static 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;}}public static void main(String[] args) {Object[] a = {1, null, 2, null, null, 3, null};List<TreeNode> list = new ArrayList<>();for (int i = 0; i < a.length; i++) {if (a[i] != null) {TreeNode t = new TreeNode((int) a[i]);list.add(t);} else {list.add(null);}}for (int i = 0; i < list.size(); i++) {if (list.get(i) == null) {// i=2continue;}//增加判空,因为可能只有左子树,或者只有右子树if ((2 * i + 1) < list.size() && list.get(2 * i + 1) != null) {list.get(i).left = list.get(2 * i + 1);}if ((2 * i + 2) < list.size() && list.get(2 * i + 2) != null) {list.get(i).right = list.get(2 * i + 2);}}printNode(list.get(0));}public static void printNode(TreeNode n) {/***        1*   null    2*         3   null*/if (n != null) {System.out.print(" " + n.val);printNode(n.left);printNode(n.right);}}
}

输出:

1 2 3

二叉树的遍历

leetcode94.二叉树的中序遍历

题目描述

    public static List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();list = put(root, list);return list;}public static List<Integer> put(TreeNode r, List<Integer> list) {if (r != null) {list = put(r.left, list);list.add(r.val);list = put(r.right, list);}return list;}
}

leetcode144.二叉树的前序遍历

题目描述

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

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

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

相关文章

新兴AI技术及其创业机会

量子计算与AI 量子计算是未来计算技术的前沿&#xff0c;它通过量子比特进行信息处理&#xff0c;相较于传统计算机&#xff0c;量子计算在处理复杂问题上有着天然的优势。将量子计算与AI结合&#xff0c;可以极大提升AI模型训练的效率和处理数据的能力。 创业机会&#xff1a…

基于NXP的ISELED开发环境搭建

目录 前言一、获取S32K SDK ISELED driver二、安装S32K SDK ISELED driverISELED文件说明三、ISELED工程介绍方案框图:图形化界面配置注意事项前言 NXP S32K ISELED 32位Arm Cortex-M微控制器 (MCU) 包括一种全新的通信协议 (ISELED),用于控制汽车和工业照明应用中的静态和动…

简述前端开发全景:从基础到未来的语言与趋势解析

前端开发概述 前端开发指的是创建网站或应用程序中用户可以直接看到和与之交互的部分。前端开发的主要目标是通过编写代码来制作用户界面&#xff0c;确保信息以易于理解和互动的方式展示给用户。 HTML和CSS HTML&#xff1a;HTML是构建网页的基础&#xff0c;负责定义网页的…

系统IO函数接口

目录 前言 一. man手册 1.1 man手册如何查询 1.2 man手册基础 二.系统IO函数接口 三.open打开文件夹 3.1 例1 open打开文件 3.2 open打开文件代码 3.3 例2 创建文件 四.write写文件 4.1 write写文件 五. read读文件 5.1 read读文件与偏移 5.2 偏移细节 5.3 read读文件代码 六.复…

3.5网安学习第三阶段第五周回顾(个人学习记录使用)

本周重点 ①SSRF服务器端请求伪造 ②序列化和反序列化 ③Vaudit代码审计 本周主要内容 ①SSRF服务器端请求伪造 一、概述 SSRF: server site request forgery (服务器端请求伪造)。 SSR: 服务端请求&#xff0c;A服务器通过函数向B服务器发送请求。 SSRF发生的前提条件…

Flutter动画笔记---总结

三种情况&#xff1a;第一种情况&#xff1a;隐式动画&#xff0c;全自动动画&#xff08;属于内部封装好了&#xff0c;只需要几行代码&#xff0c;就可以实现非常强大的效果&#xff09;第二种情况&#xff1a;显示动画&#xff0c;手动控制的动画&#xff08;提供自定义选择…

【ARM 嵌入式 C 字符串系列 23 -- 返回从父字符串找到相同子字符串的个数】

请阅读【嵌入式开发学习必备专栏 】 文章目录 返回从父字符串找到相同子字符串的个数 返回从父字符串找到相同子字符串的个数 在 C 语言中&#xff0c;可以编写一个自定义函数来计算一个父字符串&#xff08;haystack&#xff09;中相同子字符串&#xff08;needle&#xff09…

蓝桥杯备考随手记: practise04

问题描述: 小明被不明势力劫持。后莫名其妙被扔到 X 星站再无问津。小明得知每天都有飞船飞往地球&#xff0c;但需要 1 元的船票&#xff0c;而他却身无分文。他决定在 X 星站打工。好心的老板答应包食宿&#xff0c;第 1 天给他 1 元钱。并且&#xff0c;以后的每一天都比前…

《QT实用小工具·三》偏3D风格的异型窗体

1、概述 源码放在文章末尾 可以在窗体中点击鼠标左键进行图片切换&#xff0c;项目提供了一些图片素材&#xff0c;整体风格偏向于3D类型&#xff0c;也可以根据需求自己放置不同的图片。 下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; 头文件部分&#xff…

Linux安装Tomcat保姆级教程

文章目录 前言一、安装JDK二、Tomcat下载三、Tomcat安装1.创建Tomcat的安装目录2.切换到Tomcat的安装目录3.上传Tomcat安装包4.解压缩5.切换到安装好的tomcat的bin目录6.启动tomcat7.网络请求测试 四、外部电脑访问nginx设置方法一&#xff1a;关闭防火墙方法二&#xff1a;添加…

Java反射系列(3):从spring反射工具ReflectionUtils说起

目录 传送门 兼容性引发的"血案" ReflectionUtils的原理 目的有三 ReflectionUtils的API使用 Method getAllDeclaredMethods findMethod invokeMethod Field getDeclaredFields findField getField makeAccessible Constructor accessibleConstructo…

Spring IoCDI(2)

IoC详解 通过上面的案例, 我们已经知道了IoC和DI的基本操作, 接下来我们来系统地学习Spring IoC和DI的操作. 前面我们提到的IoC控制反转, 就是将对象的控制权交给Spring的IoC容器, 由IoC容器创建及管理对象. (也就是Bean的存储). Bean的存储 我们之前只讲到了Component注解…

SAP Fiori开发中的JavaScript基础知识10 - 变量作用域,变量提升

1. 背景 本文将会介绍JavaScript中两个相对复杂的概念&#xff0c;也即作用域和变量提升。这个概念在JavaScript中的设计和ABAP中的设计区别还是比较大的&#xff0c;特别是变量提升部分。第一次接触JavaScript的同学&#xff0c;要注意理解和区分。 2. 作用域 在JavaScript…

vscode安装

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x1f601; 喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა …

商场促销--策略模式

1.1 商场收银软件 package com.lhx.design.pattern.test;import java.util.Scanner;public class Test {public static void main(String[] args){System.out.println("**********************************************"); System.out.println("《大话设计模式…

vue3鼠标向下滑动,导航条改变背景颜色和logo的封装

代码中使用了element-plus组件&#xff0c;需先安装 向下滑动前 向下滑动后&#xff08;改变了logo 字体 背景颜色&#xff09; <script lang"ts" setup> import router from /router; import { ArrowDown } from element-plus/icons-vue import { ref, …

【tensorflow框架神经网络实现鸢尾花分类—优化器】

文章目录 1、前言2、神经网络参数优化器2.1、SGD2.2、SGDM2.3、Adagrad2.4、RMSProp2.5、Adam 3、实验对比不同优化器4、结果对比 1、前言 此前&#xff0c;在【tensorflow框架神经网络实现鸢尾花分类】一文中使用梯度下降算法SGD&#xff0c;对权重 w w w和偏置 b b b进行更新…

如何在Windows上安装SSH

SSH&#xff08;Secure Shell&#xff09;协议是一种强大且安全的网络协议&#xff0c;它为用户提供了一种加密的方式来远程访问和管理终端设备。在Windows操作系统中&#xff0c;安装和配置SSH服务是一个相对直接的过程&#xff0c;可以让你享受到SSH带来的便利和安全性。下面…

软件设计原则:迪米特法则

定义 迪米特法则&#xff08;Law of Demeter, LoD&#xff09;&#xff0c;又称最少知识原则&#xff0c;它指导我们在设计软件时&#xff0c;应当尽量减少对象之间的交互&#xff0c;一个对象应该对其他对象有尽可能少的了解。具体来说&#xff0c;一个对象应该只调用属于以下…

Lua脚本的使用

一、使用lua脚本扣减单个商品的库存 SpringBootTest class LuaTests {AutowiredStringRedisTemplate stringRedisTemplate;Testvoid test3() {for (int i 1; i < 5; i) {stringRedisTemplate.opsForValue().set("product."i,String.valueOf(i));}}Testvoid test…