`
yaojingguo
  • 浏览: 207981 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Threaded Binary Tree

阅读更多

#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)是对二叉树的一种优化,目的是使遍历二叉树的过程更加高效。

    Binary-Tree.7z

    线程二叉树(Threaded Binary Tree)是另一种优化的二叉树,它通过在每个节点上增加指向其前驱或后继节点的线索,使得在树中进行遍历时无需额外的数据结构,从而提高效率。"Threaded_Binary_Tree.hpp"可能涉及这种...

    数据结构Advanced-Data-Structures

    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...

    数据结构二叉树实验报告.doc

    * 线索二叉树(Threaded Binary Tree):一种特殊的二叉树,每个节点中有一个指向其左孩子节点和右孩子节点的指针。 八、哈夫曼树: * 哈夫曼树(Huffman Tree):一种特殊的二叉树,用于哈夫曼编码的构建。 * ...

    基于GPU快速光线跟踪算法的设计与实现.pdf

    该论文提出了一种基于流架构的GPU光线跟踪算法,并采用了线索二叉树(Threaded Binary Tree)的KD-Tree结构来组织场景。KD-Tree是一种空间分割的数据结构,用于高效地进行空间搜索和物体间的碰撞检测。传统的KD-Tree...

    ThreadedBinaryTreeDemo.java

    用Java实现【线索二叉树】完整版,加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)

    数据结构各种算法

    文档中的BinaryTree.h提供了二叉树的框架,Node.h提供了节点的定义。 9. 线索二叉树(Threaded Binary Tree) 线索二叉树是一种特殊构造的二叉树,它在二叉树的节点中增加了线索,使得能通过遍历来直接找到前驱或...

    数据结构叉树作业及标准答案.doc

    3. **线索二叉树(Threaded Binary Tree)**: - 线索二叉树是通过增加线索(指向前驱和后继节点的指针)来方便进行中序遍历的二叉树。 4. **完全二叉树(Complete Binary Tree)**: - 完全二叉树是每一层(除了...

    数据结构-3期(KC002) 中序线索二叉树中查找后继结点.docx

    为了方便快速查找某个节点的后继,我们引入了线索二叉树(Threaded Binary Tree)的概念。线索二叉树是在二叉树的非空子树指针位置增加线索,以指示前驱或后继节点,分为左线索和右线索。 在中序线索二叉树中,每个...

    左程云leetcode-algorithm-and-data-structure:算法+数据结构=程序

    左程云leetcode 数据结构和算法学习笔记...线索二叉树(Threaded Binary Tree) 前缀树/字典树(Trie) 5. 哈希/散列(Hashing) 哈希表(Hash Table) 哈希函数(Hash Functions) 6. 优先队列(Priority Queue) 堆

    左程云leetcode-algorithm-and-data-structure:算法+数据结构=程序https://en.wikipedia

    左程云leetcode 数据结构和算法学习笔记...线索二叉树(Threaded Binary Tree) 前缀树/字典树(Trie) 5. 哈希/散列(Hashing) 哈希表(Hash Table) 哈希函数(Hash Functions) 6. 优先队列(Priority Queue) 堆

    04 ThreadBinaryTree.zip

    《严蔚敏数据结构与算法实现》是一本深入探讨数据结构和算法的经典教材,其中“线程二叉树”(Threaded Binary Tree)是其中的一个重要章节。线程二叉树是一种对二叉查找树(Binary Search Tree, BST)进行优化的...

    5-23算法InThread1

    【5-23算法InThread1】是一种在二叉树数据结构中实现中序遍历的优化算法,通常用于线索二叉树(Threaded Binary Tree)。这种算法的主要目的是通过增加线索来改善遍历效率,使得在遍历过程中可以直接跳过没有子节点...

    中序线索化及中序遍历.rar

    线索二叉树(Threaded Binary Tree)就是为了解决这个问题,它通过在每个节点中增加两个额外的指针,称为前向线索(forwards thread)和后向线索(backwards thread),来指示在中序遍历过程中下一个应该访问的节点...

    HuffmanCode

    在给定的文件`HuffmanTreeAndTreadBTree`中,可能包含了实现哈弗曼编码的两种数据结构:哈弗曼树(Huffman Tree)和线性链表表示的二叉树(Threaded Binary Tree)。哈弗曼树直接表示字符与编码的关系,而线性链表...

    TBT.rar_in

    线程化二叉树(Threaded Binary Tree,简称TBT)是一种在二叉搜索树的基础上进行优化的数据结构,主要用于提高二叉树的遍历效率。在这个C++实现中,我们将会探讨如何构建和操作线程化二叉树,以及它在实际应用中的...

    树和二叉树(3)线索二叉树(0).pdf

    线索二叉树(Threaded Binary Tree)是一种特殊的二叉树,它在二叉链表的基础上增加了线索,以便在非递归方式下进行遍历。线索二叉树的每个节点包含两个额外的指针,用于指向该节点在中序遍历序列中的前驱和后继节点...

    c++编写的二叉树遍历程序

    **中序穿线(Threaded Binary Tree)** 中序穿线是一种优化二叉树遍历的方法,特别是在进行中序遍历时。在每个节点上增加一个指向其前驱或后继节点的指针,可以使得遍历过程更高效。对于二叉搜索树,中序穿线后,...

    5-22算法IR1

    标题 "5-22算法IR1" 描述的是在中序线索二叉树(Threaded Binary Tree)中插入一个新结点的操作,具体是将结点p作为结点s的右子结点的过程。这个过程涉及到二叉树的线索化,这是一种特殊的数据结构,它通过在二叉树...

    DS树和二叉树线索二叉树树和森林PPT学习教案.pptx

    线索二叉树(Threaded Binary Tree)的概念是为了提高遍历效率而提出的。在原始的二叉树中,空的左右孩子指针并没有被充分利用。线索二叉树通过在这些空指针位置添加线索,使得空指针可以指向当前节点的前驱或后继...

Global site tag (gtag.js) - Google Analytics