线索二叉树JS

线索二叉树是一种二叉链表的优化,用于在遍历时方便找到前驱和后继节点。通过Ltag和Rtag字段,线索二叉树能够指示结点是否有孩子或者是否为前驱或后继。本文介绍了线索二叉树的结点结构,线索的含义,以及线索化过程,并提及了使用JavaScript实现线索二叉树的可能性。
摘要由CSDN通过智能技术生成

线索二叉树

当用二叉链表来存储二叉树时,每次只能找到左右孩子的信息,不能直接找到其前驱和后继结点的信息。线索二叉树就解决了这个问题。

结点结构图:
LChild Ltag Data Rtag RChild

A.如果有左孩子,则LChild继续指向左孩子,否则,指向该结点的前驱结点。
B.如果有右孩子,则RChild继续指向右孩子,否则,指向该结点的后继结点。
Ltag 用来标记是 左孩子(Ltag = 0)还是 前驱结点 (Ltag = 1)
Rtag 用来标记是 右孩子(Rtag = 0) 还是 后继结点 (Rtag = 1)

线索链表:上面的结点结构组成的二叉树的存储结构
线索:在这种存储结构中,指向前驱和后继结点的指针
线索化:对二叉树以某种次序进行遍历并且加上线索的过程
线索二叉树:线索化的二叉树
在这里插入图片描述
说明:画线索二叉树时,实线表示指针,指向其左、右孩子;虚线表示线索,指向其直接前驱或直接后继。

线索二叉树的遍历

var LINK = 0;
var THREAD = 1;

function BinaryThreadTree_inOrder(data, leftChild, rightChild) {
   
    this.data = data;
    this.leftChild = leftChild || null;
    this.rightChild = rightChild || null;
    // 左右标记
    this.leftTag = this.rightTag = undefined;
}
BinaryThreadTree_inOrder.prototype = {
   
    constructor: BinaryThreadTree_inOrder,
    // 中序线索二叉树的遍历
    inOrderTraverse_thread: function (visit) {
   
        var p = this.leftChild;

        while (p != this) {
   
            while (p.leftTag === LINK) p = p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值