`
yaojingguo
  • 浏览: 209100 次
  • 性别: 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):一种特殊的二叉树,用于哈夫曼编码的构建。 * ...

    数据结构 树和二叉树

    而线索二叉树(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的右子结点的过程。这个过程涉及到二叉树的线索化,这是一种特殊的数据结构,它通过在二叉树...

Global site tag (gtag.js) - Google Analytics