#include <stdio.h>
enum pointer_tag { LINK, THREAD };
struct node {
char* data;
struct node* lchild;
struct node* rchild;
enum pointer_tag ltag, rtag;
};
void visit(char* data) {
printf("%s ", data);
}
void traverse(struct node* head) {
struct node* p = head->lchild;
while (p != head) {
while (p->ltag == LINK)
p = p->lchild;
visit(p->data);
while (p->rtag == THREAD && p->rchild != head) {
p = p->rchild;
visit(p->data);
}
p = p->rchild;
}
printf("\n");
}
void set_node(struct node* node, char * data, struct node* lchild, struct node* rchild, enum
pointer_tag ltag, enum pointer_tag rtag) {
node->data = data;
node->lchild = lchild;
node->rchild = rchild;
node->ltag = ltag;
node->rtag = rtag;
}
/*
* +
* / \
* a b
*/
void test_1() {
struct node root, node1, node2, node3;
set_node(&root, "r", &node1, &node3, LINK, THREAD);
set_node(&node1, "+", &node2, &node3, LINK, LINK);
set_node(&node2, "a", &root, &node1, THREAD, THREAD);
set_node(&node3, "b", &node1, &root, THREAD, THREAD);
traverse(&root);
}
/*
* -
* / \
* / \
* + "/"
* / \ / \
* a * e f
* / \
* b -
* / \
* c d
*/
void test_2() {
struct node root, node1, node2, node3, node4, node5, node6, node7, node8,
node9, node10, node11;
set_node(&root, "r", &node1, &node7, LINK, THREAD);
set_node(&node1, "-", &node2, &node3, LINK, LINK);
set_node(&node2, "+", &node4, &node5, LINK, LINK);
set_node(&node3, "/", &node6, &node7, LINK, LINK);
set_node(&node4, "a", &root, &node2, THREAD, THREAD);
set_node(&node5, "*", &node8, &node9, LINK, LINK);
set_node(&node6, "e", &node1, &node3, THREAD, THREAD);
set_node(&node7, "f", &node3, &root, THREAD, THREAD);
set_node(&node8, "b", &node2, &node5, THREAD, THREAD);
set_node(&node9, "-", &node10, &node11, LINK, LINK);
set_node(&node10, "c", &node5, &node9, THREAD, THREAD);
set_node(&node11, "d", &node9, &node1, THREAD, THREAD);
traverse(&root);
}
int main(int argc, const char *argv[]) {
test_1();
test_2();
return 0;
}
分享到:
相关推荐
线索二叉树 线索二叉树(Threaded Binary Tree)是对二叉树的一种优化,目的是使遍历二叉树的过程更加高效。
线程二叉树(Threaded Binary Tree)是另一种优化的二叉树,它通过在每个节点上增加指向其前驱或后继节点的线索,使得在树中进行遍历时无需额外的数据结构,从而提高效率。"Threaded_Binary_Tree.hpp"可能涉及这种...
Threaded binary tree 186 AVL tree 191 Red-black tree 195 AA tree 210 Scapegoat tree 215 Splay tree 219 T-tree 234 Rope 237 Top Trees 242 Tango Trees 246 Van Emde Boas tree 268 Cartesian tree 272 Treap...
* 线索二叉树(Threaded Binary Tree):一种特殊的二叉树,每个节点中有一个指向其左孩子节点和右孩子节点的指针。 八、哈夫曼树: * 哈夫曼树(Huffman Tree):一种特殊的二叉树,用于哈夫曼编码的构建。 * ...
该论文提出了一种基于流架构的GPU光线跟踪算法,并采用了线索二叉树(Threaded Binary Tree)的KD-Tree结构来组织场景。KD-Tree是一种空间分割的数据结构,用于高效地进行空间搜索和物体间的碰撞检测。传统的KD-Tree...
用Java实现【线索二叉树】完整版,加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)
文档中的BinaryTree.h提供了二叉树的框架,Node.h提供了节点的定义。 9. 线索二叉树(Threaded Binary Tree) 线索二叉树是一种特殊构造的二叉树,它在二叉树的节点中增加了线索,使得能通过遍历来直接找到前驱或...
3. **线索二叉树(Threaded Binary Tree)**: - 线索二叉树是通过增加线索(指向前驱和后继节点的指针)来方便进行中序遍历的二叉树。 4. **完全二叉树(Complete Binary Tree)**: - 完全二叉树是每一层(除了...
为了方便快速查找某个节点的后继,我们引入了线索二叉树(Threaded Binary Tree)的概念。线索二叉树是在二叉树的非空子树指针位置增加线索,以指示前驱或后继节点,分为左线索和右线索。 在中序线索二叉树中,每个...
左程云leetcode 数据结构和算法学习笔记...线索二叉树(Threaded Binary Tree) 前缀树/字典树(Trie) 5. 哈希/散列(Hashing) 哈希表(Hash Table) 哈希函数(Hash Functions) 6. 优先队列(Priority Queue) 堆
左程云leetcode 数据结构和算法学习笔记...线索二叉树(Threaded Binary Tree) 前缀树/字典树(Trie) 5. 哈希/散列(Hashing) 哈希表(Hash Table) 哈希函数(Hash Functions) 6. 优先队列(Priority Queue) 堆
《严蔚敏数据结构与算法实现》是一本深入探讨数据结构和算法的经典教材,其中“线程二叉树”(Threaded Binary Tree)是其中的一个重要章节。线程二叉树是一种对二叉查找树(Binary Search Tree, BST)进行优化的...
【5-23算法InThread1】是一种在二叉树数据结构中实现中序遍历的优化算法,通常用于线索二叉树(Threaded Binary Tree)。这种算法的主要目的是通过增加线索来改善遍历效率,使得在遍历过程中可以直接跳过没有子节点...
线索二叉树(Threaded Binary Tree)就是为了解决这个问题,它通过在每个节点中增加两个额外的指针,称为前向线索(forwards thread)和后向线索(backwards thread),来指示在中序遍历过程中下一个应该访问的节点...
在给定的文件`HuffmanTreeAndTreadBTree`中,可能包含了实现哈弗曼编码的两种数据结构:哈弗曼树(Huffman Tree)和线性链表表示的二叉树(Threaded Binary Tree)。哈弗曼树直接表示字符与编码的关系,而线性链表...
线程化二叉树(Threaded Binary Tree,简称TBT)是一种在二叉搜索树的基础上进行优化的数据结构,主要用于提高二叉树的遍历效率。在这个C++实现中,我们将会探讨如何构建和操作线程化二叉树,以及它在实际应用中的...
线索二叉树(Threaded Binary Tree)是一种特殊的二叉树,它在二叉链表的基础上增加了线索,以便在非递归方式下进行遍历。线索二叉树的每个节点包含两个额外的指针,用于指向该节点在中序遍历序列中的前驱和后继节点...
**中序穿线(Threaded Binary Tree)** 中序穿线是一种优化二叉树遍历的方法,特别是在进行中序遍历时。在每个节点上增加一个指向其前驱或后继节点的指针,可以使得遍历过程更高效。对于二叉搜索树,中序穿线后,...
标题 "5-22算法IR1" 描述的是在中序线索二叉树(Threaded Binary Tree)中插入一个新结点的操作,具体是将结点p作为结点s的右子结点的过程。这个过程涉及到二叉树的线索化,这是一种特殊的数据结构,它通过在二叉树...
线索二叉树(Threaded Binary Tree)的概念是为了提高遍历效率而提出的。在原始的二叉树中,空的左右孩子指针并没有被充分利用。线索二叉树通过在这些空指针位置添加线索,使得空指针可以指向当前节点的前驱或后继...