二叉树的遍历方式(最全面)

目录

树的节点表现形式:

* 遍历方式:

* 1.广度优先搜索:层序遍历  1 2 3 4 7 5 6

*LeetCode:144:前序遍历:pre-order :根左右 1 2 4 7 3 5 6  

  1.递归方式:

  2.非递归方式:

* LeetCode 94:中序遍历:in-order :左根右 4 2 7 1 5 3 6

 1.递归方式:

 2.非递归方式:

*LeetCode 145:后序遍历:post-order :左右根 4 7 2 5 6 3 1

 1.递归方式:

2.非递归方式:


树的节点表现形式:


* 1.TreeNode 节点,用队列来层序遍历

* 2.数组表示 层序遍历直接遍历数组即可

* 遍历方式:

* 1.广度优先搜索:层序遍历  1 2 3 4 7 5 6

eg:LeetCode :102:解答https://blog.csdn.net/m0_75035023/article/details/143520669?spm=1001.2014.3001.5501

LinkedListQueue<TreeNode> queue = new LinkedListQueue<>();queue.offer(root);while (!queue.isEmpty()) {TreeNode node = queue.poll();System.out.print(node.val + " ");if (node.left != null)queue.offer(node.left);if (node.right != null)queue.offer(node.right);}

* 2.深度优先搜索:

          1
*       /   \
*      2     3
*     /      /
*     4  7    5  6

*LeetCode:144:前序遍历:pre-order :根左右 1 2 4 7 3 5 6  

  1.递归方式:

public static List<Integer> preorderTraversal(TreeNode root) {LinkedList<Integer> res = new LinkedList<>();if (root == null) return res;res.add(root.val);//这样是每次都新建一个list,是错误的
//        preorderTraversal(root.left);
//        preorderTraversal(root.right);res.addAll(preorderTraversal(root.left));res.addAll(preorderTraversal(root.right));return res;}

  2.非递归方式:

class Solution {public List<Integer> preorderTraversal(TreeNode root) {// LinkedList<Integer> list=new LinkedList<>();// if(root==null){//     return list;// }// list.add(root.val);// list.addAll(preorderTraversal(root.left));// list.addAll(preorderTraversal(root.right));// return list;LinkedList<TreeNode> stack =new LinkedList<>();LinkedList<Integer> list=new LinkedList<>();TreeNode curr=root;TreeNode pop=null;while(curr!=null||!stack.isEmpty()){if(curr!=null){list.add(curr.val);stack.push(curr);curr=curr.left;}else{TreeNode peek=stack.peek();if(peek.right==null){pop=stack.pop();}else{if(peek.right==pop){pop=stack.pop();}else{curr=peek.right;}}}}return list;    }
}

* LeetCode 94:中序遍历:in-order :左根右 4 2 7 1 5 3 6

 1.递归方式:

/*** 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 List<Integer> inorderTraversal(TreeNode root) {// LinkedList<Integer> list=new LinkedList<>();// if(root==null){//     return list;// }// list.addAll(inorderTraversal(root.left));// list.add(root.val);// list.addAll(inorderTraversal(root.right));// return list;}
}

 2.非递归方式:

/*** 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 List<Integer> inorderTraversal(TreeNode root) {LinkedList<TreeNode> stack=new LinkedList<>();LinkedList<Integer> list=new LinkedList<>();TreeNode curr=root;TreeNode pop=null;while(curr!=null||!stack.isEmpty()){if(curr!=null){stack.push(curr);curr=curr.left;}else{TreeNode peek=stack.peek();if(peek.right==null){pop=stack.pop();list.add(pop.val);}else if(peek.right==pop){pop=stack.pop();} else{list.add(peek.val);curr=peek.right;}}}return list;}
}

*LeetCode 145:后序遍历:post-order :左右根 4 7 2 5 6 3 1

 1.递归方式:

static void postOrder(TreeNode root) {if (root == null) return;postOrder(root.left);postOrder(root.right);System.out.print(root.val + " ");}

2.非递归方式:

/*** 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 List<Integer> postorderTraversal(TreeNode root) {LinkedList<TreeNode> stack=new LinkedList<>();LinkedList<Integer> list=new LinkedList<>();TreeNode curr=root;TreeNode pop=null;while(curr!=null|!stack.isEmpty()){if(curr!=null){stack.push(curr);curr=curr.left;}else{TreeNode peek=stack.peek();if(peek.right==null){pop=stack.pop();list.add(pop.val);}else{if(peek.right==pop){pop=stack.pop();list.add(pop.val);}else{curr=peek.right;}}}}return list;}
}

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

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

相关文章

基于HTTP编写ping操作

基于HTTP编写ping操作 前言 在上一集我们就完成了创建MockServer的任务&#xff0c;那么我们就可以正式开始进行网络的通讯&#xff0c;那么我们今天就来基于HTTP来做一个客户端ping服务端的请求&#xff0c;服务端返回pong的响应。 需求分析 基于HTTP&#xff0c;实现ping…

数学几百年重大错误:将无穷多各异直线误为直线y=x

黄小宁 h定理&#xff1a;点集AB≌B的必要条件是A≌B。 证&#xff1a;若AB则A必可恒等变换地变为BA≌A&#xff0c;而恒等变换是保距变换。证毕。 直线Z&#xff1a;x-y0&#xff08;x的变域是x轴&#xff09;可放大&#xff08;拉伸&#xff09;变换为直线L&#xff08;不≌Z…

力扣 LeetCode 459. 重复的子字符串(Day4:字符串)

解题思路&#xff1a; KMP算法 len - next[len - 1]作为最小公共子串的长度 len % (len - next[len - 1]) 0检测能否构成重复串&#xff0c;能构成整数倍&#xff0c;代表可以构成 注意&#xff1a; i 从 j 的下一位开始&#xff0c;即 i 初始化为 1 next[len - 1]需要大…

【MMIN】缺失模态想象网络用于不确定缺失模态的情绪识别

代码地址&#xff1a;https://github.com/AIM3RUC/MMIN abstract&#xff1a; 在以往的研究中&#xff0c;多模态融合已被证明可以提高情绪识别的性能。然而&#xff0c;在实际应用中&#xff0c;我们经常会遇到模态丢失的问题&#xff0c;而哪些模态会丢失是不确定的。这使得…

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟&#xff0c;由于内部HSI存在较大的误差&#xff0c;因此我们在系统完成上电初始化&#xff0c;之后需要将STM32的时钟切换到外部HSE作为系统时钟&#xff0c;那么我…

离散数学笔记

第 1 章 数理逻辑 1.1 命题 1.1.1 基本概念 非真即假的陈述句称作命题 作为命题的陈述句所表达的判断结果称作命题的真值 真值只取两个值&#xff1a;真&#xff08;1或T&#xff09;或假&#xff08;0或F&#xff09; 真值为真的命题称作真命题&#xff0c;真值为假的命…

华大严选生物基因科技有限公司:基因检测行业十佳优质品牌

在 DNA 基因检测领域&#xff0c;华大严选生物基因科技有限公司以其卓越的品质和专业的服务脱颖而出&#xff0c;荣获 DNA 基因检测行业十佳优质品牌。 华大严选拥有先进的技术和设备&#xff0c;确保检测结果的准确性和可靠性。其专业的团队由经验丰富的科学家和技术人员组成…

spring boot整合https协议

注意&#xff1a;此方式是跳过SSL认证的。 整体目录 1. 生成SSL证书 首先&#xff0c;使用keytool生成一个自签名证书。打开命令行工具并运行以下命令&#xff1a; keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这…

python3 pyinstaller编译相关 和 python2兼容的一些问题

一: python2 和 python3的兼容问题 如果本地同时安装了python2 和 python3, 且都配置了环境变量的情况下, 在命令行里如何区分呢? python2: py -2 python3: py -3如何区分python2的pip 与 python3 的pip呢 python2: pip install xxx python3: pip3 install xxx二: pyin…

互联网行业面对大数据时代新挑战如何实现数据高速传输

随着互联网技术的飞速发展&#xff0c;我们正处在一个数据量爆炸增长的时代。据IDC预测&#xff0c;到2024年&#xff0c;全球数据总量将飙升至159.2ZB&#xff0c;而到了2028年&#xff0c;这一数字更是将达到384.6ZB。这样的增长速度&#xff0c;无疑为互联网行业带来了巨大的…

Python自动化小技巧24——实现自动化输出模板表格报告

背景 很多人拿到数据excel文件&#xff0c;然后要写报告&#xff0c;做表格&#xff0c;要各种计算&#xff0c;各种排序&#xff0c;分组聚合&#xff0c;数据透视&#xff0c;然后合并单元格&#xff0c;添加边框&#xff0c;加粗&#xff0c;添加显示规则&#xff0c;添加数…

python爬虫获得店铺的所有商品

在编写Python爬虫以获取店铺的所有商品信息时&#xff0c;通常涉及到发送HTTP请求、解析响应内容以及处理API返回的数据。以下是一个详细的Python爬虫示例&#xff0c;用于获取店铺的商品信息。这个示例假设API返回的是JSON格式的数据&#xff0c;并且需要API密钥进行认证。 步…

单片机设计电流与温度监控python上位机监控平台设计

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在现代工业自动化和智能设备管理中&#xff0c;对电流和温度的实时监控是…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一&#xff0c;用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。 数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据…

【springboot使用sqlite数据库】Java后台同时使用mysql、sqlite

环境&#xff1a;根据业务的需要&#xff0c;老版程序使用的数据库是sqlite&#xff0c;版本升级成前后台分离模式&#xff0c;因此需要兼容mysql与sqlite数据库同时使用。 pom.xml设置&#xff1a; application.yml文件配置&#xff1a; mapper.java文件&#xff1a; service.…

【IC每日一题:AXI4协议时序及Verilog示例】

IC每日一题&#xff1a;AXI4协议时序及Verilog示例 1 AXI4协议1.1 AXI4通道1.1.0 握手机制1.1.1 写操作1.1.2 读操作 1.2 握手相关时序1.2.1 握手防死锁 1.3 AXI传输时序1.3.0 Burst传输1.3.1 AXI_Lite Write 传输1.3.2 Read读传输1.3.3. 非对齐传输1.3.4 Outstanding传输1.3.5…

Linux操作系统 -----(4.用户账户及组账户管理)

目录 前言 本章学习目标 1.用户分类 2.用户账户文件 3.用户影子文件 4.用户账户管理命令 4.1.新增用户命令 4.2.修改密码命令 4.3.修改用户属性命令 4.4.删除用户命令 5.组用户管理 5.1.组账户分类 5.2.组账户管理文件 5.3.组账户管理命令 5.3.1.新建组命令 5.3…

JUC基础类-AbstractQueuedSynchronizer

AbstractQueuedSynchronizer 1、AbstractQueuedSynchronizer概述2、AbstractQueuedSynchronizer源码分析2.1 AQS源码2.2 Node类 如有侵权&#xff0c;请联系&#xff5e; 如有问题&#xff0c;也欢迎批评指正&#xff5e; 1、AbstractQueuedSynchronizer概述 AbstractQueuedSy…

LIS系统:质控管理

LIS系统定义 LIS系统&#xff0c;全称为Laboratory Information System&#xff08;实验室信息系统&#xff09;&#xff0c;是专为临床检验实验室设计的信息管理系统。它在医院和实验室中扮演着至关重要的角色&#xff0c;通过自动化管理流程&#xff0c;显著提高了检验工作的…

应用jar包使用skywalking8(Tongweb7嵌入式p11版本 by lqw)

文章目录 声明linux使用skywalking安装包下载Elasticsearch安装Skywalking 安装Skywalking 如何使用Agent探针 window本地使用skywalking 声明 1.安装参考&#xff1a; SkyWalking 部署&#xff08;包含ES 2.首先安装一定要根据本帖所建议的版本进行安装和测试&#xff0c;不…