尚硅谷Java数据结构--遍历线索化二叉树

 线索化二叉树实现线性遍历,无需递归,遍历效率提高✨✨✨

package DataStructure;public class ThreadedBinaryTreeDemo {public static void main(String[] args) {Node n3=new Node(8);Node n4=new Node(10);Node n5=new Node(14);Node n1=new Node(3,n3,n4);Node n2=new Node(6);n2.left=n5;Node root=new Node(1,n1,n2);BinaryTree tree=new BinaryTree();tree.setRoot(root);tree.threadedNodes();//对二叉树进行线索化//todo 注意:即使是线索化之后,也不是所有的指针都得到了利用,有一些节点没有前驱或没有后继节点System.out.println(n4);System.out.println(n4.left);System.out.println(n4.right);//todo 死循环 tree.infixOrder(root);System.out.println("线索化遍历");tree.threadedList();}
}class Node {public int val;public Node left;public Node right;//todo leftType==0 左子树 1 前驱节点public int leftType;public int rightType;public Node() {}public Node(int val) {this.val = val;}public Node(int val, Node left, Node right) {this.val = val;this.left = left;this.right = right;}public String toString(){return "val="+val+" leftType="+leftType+" rightType="+rightType;}
}//todo 定义二叉树
class BinaryTree {private Node root;public Node pre=null;//指向前驱节点public Node post=null;public void setRoot(Node root) {this.root = root;}//遍历线索化二叉树public void threadedList(){//定义一个变量 存储当前遍历的节点Node node=root;while(node!=null){//循环找到leftType=1的节点while(node.leftType==0){node=node.left;}//node 第一个为 1System.out.println(node);while(node.leftType==1){//说明是后继结点node=node.right;System.out.println(node);}//todo 一个没有记录前驱节点和后继节点的node 继续往下走 // 然后找到接下来的第一个有前驱节点的节点(一般来说它的下一个节点就记录了它的前驱节点(当前节点))node=node.right;}}//进行重载 使代码简洁public void threadedNodes(){this.threadedNodes(root);}//中序线索化二叉树public void threadedNodes(Node node) {if (node == null) return;//左子树if (node!=null && node.left != null) threadedNodes(node.left);//父节点if (node!=null && node.leftType == 0 && node.left==null){//指向前驱节点node.left=pre;node.leftType=1;}if(pre!=null && pre.rightType==0 && pre.right==null){//指向后继结点//让前驱节点的右指针指向当前节点// todo 前驱节点和后继结点是一对相对的概念pre.right=node;pre.rightType=1;}pre=node;//右子树if (node.right != null) threadedNodes(node.right);}
}

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

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

相关文章

工业控制系统网络安全防护指南

导 读 为适应新型工业化发展形势,提高我国工业控制系统网络安全保障水平,指导工业企业开展工控安全防护工作,以高水平安全护航新型工业化高质量发展,工业和信息化部印发《工业控制系统网络安全防护指南》。《防护指南》定位于面向…

C++输入输出(I\O)

我们知道C是由C语言发展而来的,几乎完全兼容C语言,换句话说,你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言,C在C语言之上增加了面向对象以及泛型编程机制,因此C更适合中大型程序的开发,然而C…

kafka(三)springboot集成kafka(1)介绍

一、相关组件介绍 1、pom&#xff1a; <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency> </dependencies> 2、k…

FineDance:细粒度编舞3D数据集 学习笔记

目录 关于数据集 创新点 数据处理&#xff1a; motion可视化代码 FineDance&#xff1a;细粒度编舞数据集用于 3D 全身舞蹈生成 关于数据集 目前&#xff0c;最流行的 3D 编舞数据集是 AIST [24]&#xff0c;它提供 5 小时的舞蹈&#xff0c;但没有手部动作。AIST通过多视…

vulhub中Wordpress 4.6 任意命令执行漏洞复现

由于Mysql初始化需要一段时间&#xff0c;所以请等待。成功运行后&#xff0c;访问http://your-ip:8080/打开站点&#xff0c;初始化管理员用户名和密码后即可使用&#xff08;数据库等已经配置好&#xff0c;且不会自动更新&#xff09;。 发送如下数据包&#xff0c;可见/tmp…

计网面试题整理上

1. 计算机网络的各层协议及作用&#xff1f; 计算机网络体系可以大致分为一下三种&#xff0c;OSI七层模型、TCP/IP四层模型和五层模型。 OSI七层模型&#xff1a;大而全&#xff0c;但是比较复杂、而且是先有了理论模型&#xff0c;没有实际应用。TCP/IP四层模型&#xff1a…

【三维重建】相移法+格雷码

本篇文章介绍一种稠密点云的获取方式——条纹结构光三维重建算法。 在学习此算法前&#xff0c;我们需要对基于视觉的三维重建算法有一定了解。 需要了解什么是相机模型、相机标定以及三角化的相关知识。 【三维重建】摄像机几何-CSDN博客 【三维重建】摄像机标定&#xff…

PHPInfo()信息泄漏原理以及修复方法

漏洞名称&#xff1a;PHPInfo信息泄漏、phpinfo()函数信息泄漏 漏洞描述&#xff1a; phpinfo()函数返回的信息中包含了服务器的配置信息&#xff0c;包括&#xff1a; 1&#xff09;PHP编译选项以及文件扩展名的相关信息&#xff1b; 2&#xff09;php的版本信息 3&#…

微信小程序-2

数据绑定 index.js Page({data: {info: hello world,randomNumber: Math.random() * 10,imgSrc:http://www.itheima.com/images/logo.png} })index.wxml <view>{{ info }}</view><view>{{ randomNumber > 5 ? 随机数大于等于5 : 随机数小于5 }}</v…

【c++】引用的本质

引用的本质&#xff1a;引用实际上是给变量“起别名”&#xff0c;而其底层本质上是一个常量指针 int x 0; int& y x;在上述代码中&#xff0c;当执行第二句时&#xff0c;底层在做如下的转换 int* const y &x;相当于y是一个int型的常量指针&#xff0c;指向x的地…

低密度奇偶校验码LDPC(七)——SPA和积译码算法的简化

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

神经网络推理优化方法总结

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网&#xff1a;https://www.jenkins.io 中文文档&#xff1a;https://www.j…

【MGR】MySQL Group Replication快速开始

目录 17.2 Getting Started 17.2.1 Deploying Group Replication in Single-Primary Mode 17.2.1.1 Deploying Instances for Group Replication 17.2.1.2 Configuring an Instance for Group Replication Storage Engines Replication Framework Group Replication Sett…

分享一个AI工程师从入门到精通学习路径

学习AI工程师的路径可以分为以下几个阶段&#xff1a; 学习基础知识&#xff1a;首先&#xff0c;你需要掌握数学、统计学和线性代数的基本概念。这些基础知识是理解AI算法和模型的基础。 学习编程&#xff1a;你需要掌握至少一门编程语言&#xff0c;如Python、Java或C。这些…

Java基础概念 1-6注释关键字字面量变量-基本用法变量-使用方式和注意事项变量练习-计算公交车的人数

Java基础概念 1-注释 单行注释 // 多行注释 /* */ 文档注释 /** */ --暂时不用 例: public class HelloWorld{ //main方法,表示程序的主入口.public static void main (String[] args){/*输出语句(打印语句)会把小括号内的内容进行输出打印.*/System.out.…

如何理解MySQL的计算层做的很差,但innodb则非常优秀

在MySQL中&#xff0c;计算层通常指的是查询优化器和执行引擎&#xff0c;负责解析查询语句、生成执行计划&#xff0c;并执行实际的查询操作。而InnoDB则是MySQL的存储引擎之一&#xff0c;负责管理数据的存储和检索。 理解MySQL计算层较差但InnoDB优秀的情况可能涉及到以下几…

Ethersacn的交易数据是什么样的(2)

分析 Raw Transanction RLP&#xff08;Recursive Length Prefix&#xff09;是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式&#xff0c;以便在以太坊中传输和存储。RLP 是一种递归的编码方式&#xff0c;允许对复杂的数据结构进行编码。所…

鸿蒙实战应用开发:【拨打电话】功能

概述 本示例通过输入电话&#xff0c;进行电话拨打&#xff0c;及电话相关信息的显示。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 拨打电话 介绍 本示例使用call相关接口实现了拨打电话并显示电话相关信息的功能 效果预览 使用说明 1.输入电话号码后&#…

EIP-1559

EIP EIP是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;的缩写。它是一种标准化的提案制度&#xff0c;用于描述和讨论对以太坊区块链网络的改进和升级。EIP的目的是提供一个开放的、透明的过程&#xff0c;让社区成员、开发者和其他利益相关者能够共同…