| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【霍罗维兹数据结构】线索二叉树 | THREADED BINARY TREES -> 正文阅读 |
|
[数据结构与算法]【霍罗维兹数据结构】线索二叉树 | THREADED BINARY TREES |
前言 最近在读霍罗维兹的《数据结构基础》(Fundamentals of Data Structures in C),本篇博客为阅读笔记和知识总结。 0x00 线索(threads)具有 个结点的二叉链表共有 个链域,其中 为空链域。 A.J.Perlis 与 C.Thornton 提出一种方法,用用原来的空链域存放指针,指向树中的其他结点。 这种指针就被称为 线索(threads),记 ptr 指向二叉链表中的一个结点,一下是建线索的规则: ① 如果 ptr->leftChild 为空,则存放指向中序遍历排列中该节点的前驱结点。该节点成为 ptr 的?中序前驱(inorder predecessor)。 ② 如果 ptr->rightChild 为空,则存放指向中序遍历序列中该结点的后继节点。这个节点称为 ptr 的中序后继(inorder successor)。 当我们在内存中表示树时,我们必须能够区分线程和普通指针。 这是通过在节点结构中添加两个额外的字段来实现的,即 left_thread 和 right_thread 。
?我们假设所有线程二叉树都有一个头结点。 线程二叉树的无序遍历 确定一个节点的无序继承者。 [Program 5.10]??Finding the inorder successor of a node.
为了进行中序遍历,我们反复调用 insucc? [Program 5.11]? Inorder traversal of a threaded binary tree.
向线程二叉树插入一个节点,假设我们有一个节点,即 parent,它的右子树是空的。我们希望插入child 作为父节点的右子节点。 要做到这一点,我们必须: ① 将 parent-> right_thread 改为 FALSE ② 将 child->left_thread 和 child->right_thread 改为 TRUE ③ 将 child->left_child 改为指向 parent ④ 将 child->right_child 改为 parent->right_child ⑤ 将 parent->right_child 改为指向 child? 对于 parent 具有非空右子树的情况: 处理这两种情况的 C 代码如下: [Program 5.12] : Right insertion in a threaded binary tree
参考资料 Fundamentals of Data Structures in C |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:21:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |