数据结构——线索树

核心思路就是要先将空指针转为线索 也就是多出来的n+1个指针,然后再将这些指针连成一个链表,遍历就可以达到O(n)的速度打出

以下代码为中序遍历 前序和后续随缘更新

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct Node
{
    char data;
    struct Node *l, *r;
    int Ltag, Rtag;
} *TR, TN;
TR createNode(char data)
{
    TR pnew = (TR)malloc(sizeof(TN));
    pnew->data = data;
    pnew->l = pnew->r = NULL;
    pnew->Ltag = pnew->Rtag = 0;
    return pnew;
}
TR pre = NULL;
void createTr(TR *root)
{
    char ch;
    cin >> ch;
    if (ch == '#')
    {
        *root = NULL;
    }
    else
    {
        *root = createNode(ch);
        createTr(&(*root)->l);
        createTr(&(*root)->r);
    }
}
void Pre(TR root)
{
    cout << root->data << " ";
    if (root->l != NULL)
        Pre(root->l);
    if (root->r != NULL)
        Pre(root->r);
}
void Thread_mid(TR *root)
{
    if (*root == NULL)
        return;
    Thread_mid(&(*root)->l);
    if ((*root)->l == NULL)
    {
        (*root)->Ltag = 1;
        (*root)->l = pre;
    }
    if (pre != NULL && pre->r == NULL)
    {
        pre->Rtag = 1;
        pre->r = *root;
    }
    pre = *root;
    Thread_mid(&(*root)->r);
}
TR findnext(TR root)
{
    if (root->Rtag == 1)
        return root->r;
    else
    {
        root = root->r;
        while (root->Ltag == 0)
            root = root->l;
        return root;
    }
}
void midorder(TR root)
{
    TR p = root;
    while (p->l != NULL)
        p = p->l;
    cout << p->data << " ";
    while (p->r != NULL)
    {
        p = findnext(p);
        cout << p->data << " ";
    }
}
int main()
{
    TR root;
    createTr(&root);
    // Pre(root);
    Thread_mid(&root);
    midorder(root);
}

相关推荐

  1. 数据结构——线索

    2024-04-22 22:30:04       38 阅读
  2. 数据结构线索二叉

    2024-04-22 22:30:04       10 阅读
  3. 数据结构——5.3 二叉的遍历和线索二叉

    2024-04-22 22:30:04       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 22:30:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 22:30:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 22:30:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 22:30:04       20 阅读

热门阅读

  1. 【数据结构】分块查找

    2024-04-22 22:30:04       19 阅读
  2. 每日一练:九九乘法表(双重循环)

    2024-04-22 22:30:04       41 阅读
  3. json文件的格式化

    2024-04-22 22:30:04       39 阅读
  4. 双向链表的实现

    2024-04-22 22:30:04       17 阅读
  5. 高级软考项目管理之项目进度管理

    2024-04-22 22:30:04       48 阅读
  6. 计算机网络面试问题

    2024-04-22 22:30:04       52 阅读
  7. pprof火焰图排查问题小计

    2024-04-22 22:30:04       16 阅读
  8. Gitea:开源世界的协作灵魂

    2024-04-22 22:30:04       17 阅读
  9. Python 计算给定公式的真值表

    2024-04-22 22:30:04       15 阅读