三叉链表存储——二叉树(Java)

【考研复习】二叉树的特殊存储|三叉链表存储二叉树、一维数组存储二叉树、线索二叉树 使用中序遍历的顺序进行线索化。代码中有一个难以理解的点,为什么不用p直接找后继,而是使用了前驱结点找后继。实际上,不是不用p找后继,而是从p找不到后继,所以只能间接地找前驱的后继,这样的方式找后继,明白了这点,代码就不难懂了。另外设计一个填充函数,函数功能是将所有结点的parent结点填充正确。 阅读详情

每个节点记住其左右子节点以及父节点;

package com.answer.binaryTree;

public class ThreeLinkBinTree {
    private static class Node{
        private String data;
        private Node left;
        private Node right;
        private Node parent;
        public Node(){};
        public Node(String data){
            this.data=data;
        }
        public Node(String data,Node parent,Node left,Node right){
            this.data=data;
            this.left=left;
            this.right=right;
        }
    }
    private Node root;
    public ThreeLinkBinTree(){
        this.root=new Node();
    }
    public ThreeLinkBinTree(String data){
        this.root=new Node(data);
    }
    public Node add(Node parent,String data,boolean left){
        if(parent==null){
            throw new RuntimeException("父节点为空");
        }
        if(left&&parent.left!=null){
            throw new RuntimeException("已有左节点");
        }
        if(!left&&parent.right!=null){
            throw new RuntimeException("已有右节点");
        }
        Node node=new Node(data);
        if(left){
            parent.left=node;
        }else {
            parent.right=node;
        }
        node.parent=parent;
        return node;
    }
    public boolean empty(){
        return root==null;
    }
    public Node getRoot(){
        if(root==null){
            throw new RuntimeException("没有根节点");
        }
        return root;
    }
    public Node getPar(Node node){
        if(node==null){
            throw new RuntimeException("此节点为空");
        }return node.parent;
    }
    public Node getLeft(Node parent){
        if(parent==null){
            throw new RuntimeException("父节点为空");
        }
        return parent.left==null?null:parent.left;
    }
    public Node getRight(Node parent){
        if(parent==null){
            throw new RuntimeException("父节点为空");
        }
        return parent.right==null?null:parent.right;
    }
    public int deep(){
        return deep(this.root);
    }

    private int deep(Node node) {
        if(node==null){
            return 0;
        }
        if(node.left==null&&node.right==null){
            return 1;
        }else {
            int leftDeep=deep(node.left);
            int rightDeep=deep(node.right);
            int max=leftDeep>rightDeep?leftDeep:rightDeep;
            return max+1;
        }
    }

    public static void main(String[] args) {
        ThreeLinkBinTree tree=new ThreeLinkBinTree("Root");
        Node root=tree.getRoot();
        Node node1=tree.add(root,"A",true);
        Node node2=tree.add(root,"B",false);
        System.out.println(node1.parent.data);
        System.out.println(tree.deep());
    }
}

 

二叉树的三叉链表存储结构的简单实现 三叉链表存储结构比二叉链表存储多了一个指向父节点的引用,虽然增加了空间开销,但是提升的查找的速度。下面是源代码,功能不多,但是可以帮助大家很快理解这种数据结构。 //a simple example to ThreeLinkBinTree //HanChun at Xidian University package mywork.c20150611; public class ThreeLi 阅读详情

相关推荐

二叉树的三叉链表存储表示

二叉树的三叉链表存储表示.

java用三叉链表构建二叉树_三叉链表实现二叉树的基本操作

三叉链表存储表示改进于二叉链表,增加指向父节点的指针,能更好地实现结点间的访问。存储结构/* 二叉树的三叉链表存储表示 */typedef struct BiTPNode{TElemType data;struct BiTPNode *parent,*lchild,*rchild; /* 双亲、左右孩子指针 */}BiTPNode,*BiPTree;下面给出二叉树采用三叉链表,实现了二叉树的构造、...

weixin_42244017的博客 1362

LSCM最小二乘保角参数化

LSCM最小二乘保角参数化 最小二乘思想 已知一组点的数据(x,y) x x1x_1x1​ x2x_2x2​ x3x_3x3​ … xnx_nxn​ y y1y_1y1​ y2y_2y2​ y3y_3y3​ … yny_nyn​ 可以近似为线性关系 y=ax+by=ax+by=ax+b ,目标为确定常数 aaa , bbb ; 解法:找到 aaa , bbb ,使得所有 yiy_iyi​ 与 axi+bax_i+baxi​+b 偏差的平方和 Q=∑i=1n(yi−axi−b)2 Q=\s

weixin_49732532的博客 4252

java用三叉链表构造二叉树_Java基础 - 二叉树的三叉链表存储

package com.yc.tree;/*** @author WB* @param ** 三叉链表存储的思想是让每个节点不仅“记住”它的左、右两个子节点,还要“记住”它的父节点,因此需要为每个节点增加left、right和parent* 三个指针,分别引用该节点的左、右两个子节点和父节点。因此,三叉链表的每个节点有如下图所示的结构。* ↑parent* _│_______________...

weixin_39889487的博客 543

华为海思IC设计岗位笔试全解析:物理、电路与工艺三大方向备考指南

本文全面解析华为海思IC设计岗位笔试的物理、电路与工艺三大方向备考要点。针对物理设计方向,重点讲解半导体能带理论、载流子输运机制等核心考点;电路设计方向涵盖Verilog语法、UVM验证等关键技术;工艺方向则深入探讨FinFET工艺、光刻技术等前沿知识。提供高效备考策略和应试技巧,助力考生提升通过率。

weixin_29196613的博客 1085

基于opencv自定义网格板的相机标定软件源码

本软件开发版使用的是VS2013和QT5.7, 安装版的需要安装VS核心库(目录里的vcredist_x64.exe, 已安装VS的不需要)。采用强大的模板匹配算法,本程序适用于自定义大范围网格标定(本例程网格使用的是自己画的网格板31*21*10cm),网格点识别度高,矫正速度快,精度高。 使用步骤 第1步: 打开图片,打开标定工具GridCalibTool.exe, 然后选择打开一张待标定的图(CalibFiles文件夹下的500.jpg)。如下图: 第2步: 提取待标定区域(去掉多余部分,只保留网

qq_33138437的博客 1120

java用三叉链表构建二叉树,二叉树的三叉链表存储及其Java实现

三叉链表存储的思想是让每个节点持有三个引用parent、left、right,分别指向其父节点、左子节点和右子节点。如下图所示: 因此,三叉链表存储的节点大致如:class Node{T data;Node parent;Node left;Node right;}Java实现代码:package com.liuhao.DataStructures;import com.liuhao.DataSt...

weixin_39620845的博客 564

单片机通识之UART通信协议(如何用汇编实现)

使用汇编实现UART通信

smart_num_1的博客 996

java用三叉链表构造二叉树_java数据结构之三叉链表示的二叉树

三叉链表示的二叉树定义所畏的三叉链表示是指二叉树由指向左孩子结点、右孩子结点、父亲结点【三叉】的引用(指针)数据和数据组成。package datastructure.tree.btree;/*** 三叉链表示的二叉树定义* @author Administrator**/public class BinTreeNode{private Object data; // 数据域private Bin...

weixin_42197841的博客 614

Unity插件——WebView内嵌网页/浏览器插件

一、相关插件: 1、Embedded Browser 插件(文件夹名ZFBrowserUnity) 2、UniWebView插件 3、UnityAndroidWebviewToTexture插件 4、3D WebView for Android插件 二、遇到的问题: 3D WebView显示问题 项目中使用3D WebView存在的问题 三、插件使用 Embedded Browser 加载页面的使用

青岚岁叶的博客 1万+

如何判断一个程序员的技术比你强?

技术大佬与普通程序员之间存在明显的认知差异:前者善于将复杂问题抽象为经典计算机科学问题,用声明式代码替代过程式逻辑;对异常和边界条件极度敏感,具备系统化的排查方法论;代码追求高可读性而非炫技,且执着于底层原理研究。这种技术压制体现在解决问题的确定性上——通过扎实的理论功底和工程直觉,快速定位问题本质,而非依赖试错或搜索。真正的技术实力源于对底层逻辑的深刻理解和对系统稳定性的敬畏。

wldtzzming的专栏 1088

java用三叉链表构建二叉树_二叉树的三叉链表存储(java实现)

package com.fcy.dataStruct;/*** 与二叉树的二叉链表存储相比,三叉链表存储* 多了一个指针域来记录当前节点的父节点*/class ThreeLinkBinTree{public static class TreeNode{Object data;TreeNode left; //左子节点TreeNode right; //右子节点TreeNode ...

weixin_42499882的博客 483

高速电路设计必看:同步开关噪声问题解析

数字电路中的同步开关噪声(SSN)问题日益突出,尤其是随着高速器件应用增多。本文分析了地弹和电压弹的产生机理,指出其与电源网络电感、输出驱动电流变化率密切相关。文章详细阐述了地弹参数特征,包括峰值电压、脉冲宽度等关键指标,并探讨了负载电容、信号压摆率等因素对地弹的影响。最后提出系统化的解决方案,涵盖芯片选型、电路设计、PCB布局和后期调试等多个环节,强调通过降低回路电感和控制电流变化率来有效抑制SSN。这些措施需要在性能、成本和复杂度之间取得平衡,为高速数字电路设计提供了重要参考。

一只豌豆象的博客 297

二叉树的三叉链表存储及其Java实现

三叉链表存储的思想是让每个节点持有三个引用parent、left、right,分别指向其父节点、左子节点和右子节点。如下图所示: 因此,三叉链表存储的节点大致如: class Node{         T data;         Node parent;         Node left;         Node right;     }   Ja

生命在于折腾 3303

智能挂锁软件需求规格说明书(SRS)

智能挂锁系统SmartPadlockV1.0是一款融合蓝牙通信、指纹识别和远程控制技术的便携式安防设备。系统由设备端、移动App和云平台三部分组成,支持蓝牙配对(10米内)、指纹识别、OTP一次性密码等多种开锁方式,响应时间<1.5秒。产品采用SM2/SM4加密技术保障安全,日均20次使用下续航达180天,兼容iOS13+/Android8.0+系统。功能包括设备绑定、远程授权、开锁记录查询和OTA固件升级,符合个人信息保护法规要求,适用于仓储、快递柜等多场景应用。

moton2017的博客 2112

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

使用java实现二叉树的三叉链表存储

        二叉链表和三叉链表实现二叉树的存储不同之处在于,三叉链表中的每一个结点多了一个指向父节点的区域,其他的地方和二叉链表没有什么区别,实现的思路和二叉链表一致,这里就不再赘述了,详情可以看上一篇二叉链表实现二叉树存储。直接上代码,不多BB。                             二叉树三叉链表存储的java实现 java代码如下: public class T...

风动云彩 1543

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

二叉树的三叉链表存储(java实现)

package com.fcy.dataStruct; /** * 与二叉树的二叉链表存储相比,三叉链表存储 * 多了一个指针域来记录当前节点的父节点 */ class ThreeLinkBinTree{ public static class TreeNode{ Object data; TreeNode left; //左子节点 TreeNode rig

funcy的专栏 2788

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java基础 - 二叉树的三叉链表存储

三叉链表存储的思想是让每个节点不仅“记住”它的左、右两个子节点,还要“记住”它的父节点,因此需要为每个节点增加left、right和parent 三个指针,分别引用该节点的左、右两个子节点和父节点。

ApatheCrazyFan的博客 1494

数据结构:二叉树的三叉链表存储--Java实现

public class ThreeLinkTree { // 内部节点类 public static class TreeNode { Object data; TreeNode left; TreeNode right; TreeNode parent; public TreeNode(Object data) { this.data = data; }

amorvos的专栏 1267

java用三叉链表构造二叉树_三叉链表存储二叉树 - JiaChang的个人空间 - OSCHINA - 中文开源技术交流社区...

二叉树的三叉链式存储三叉链式存储的思想是让每个节点不仅“记住”它的左,右两个节点,还要“记住”它的父节点,因此每个节点需要left,right,parent三个指针。 三叉链表存储方式是对二叉链表的一种改进,通过为树节点添加一个parent引用,可以让每个节点都能非常方便地访问其父节点。三叉链表存储二叉树的节点定义//三叉链表存储二叉树的节点定义class Node{Object data;//节...

weixin_39589923的博客 311

二叉树的三叉链表实现c语言,数据结构:二叉树的三叉链表存储--Java实现

public class ThreeLinkTree {// 内部节点类public static class TreeNode {Object data;TreeNode left;TreeNode right;TreeNode parent;public TreeNode(Object data) {this.data = data;}public TreeNode(Object data, ...

weixin_31128065的博客 351

《java实现树和二叉树》

《java实现树和二叉树》父节点表示树子节点表示树 父节点表示树   树中除根结点外每个结点都有一个父节点,要记录树中结点与结点直接的关系,只需要给每一个结点增加一个parent的父节点索引,根节点的parent索引为-1,如此将所有的结点存储于结点数组中,结点数组就是相当于一颗树。新增一个树结点只需要存入数据和parent索引,查找某个结点的所有子节点,只需要遍历所有结点的parent索引,相等...

乌鸦大大 305

JAVA中二叉树和树的运用_Java数据结构之树和二叉树

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~Java中的数据结构模型可以分为一下几部分:1.线性结构2.树形结构3.图形或者网状结构接下来的几章,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构。今天要讲解的是:Java线性结构Java数据结构之树形结构之前我们前几章学习的都是Java数据结构的线性结构,都是一对一...

weixin_39878989的博客 284

二叉树的存储结构入门(java描述)

1. 顺序存储结构 所谓二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。一般是按照二叉树结点从上至下、从左到右的顺序存储。这样结点在存储位置上的前驱、后继关系并不一定就是它们在逻辑上的邻接关系,然而只有通过一些方法确定某结点在逻辑上的前驱结点和后继结点,这种存储才有意义。因此,依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。 图

鸭梨的博客 692

Java数据结构之树和二叉树

从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的几章,我们将会分别讲解这几种数据结构,主要也是通过Java代码的方式来讲解相应的数据结构。 今天要讲解的是:Java线性结构 Java数据结构之树形结构 之前我们前几章学习的都是Jav...

weixin_33937913的博客 165
上一篇: 树——子节点链表示
下一篇: 深度优先遍历和广度优先遍历(Java)
Dream答案
博客等级 码龄9年 161粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream答案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值