栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c语言实现中序线索二叉树的构造

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c语言实现中序线索二叉树的构造

ThreadTree.c
//
// Created by Carry on 2021/10/26.
// 线索二叉树
//

#include "stdio.h"
#include "stdlib.h"

typedef int ElemType;
typedef struct ThreadNode {
    ElemType data;
    struct ThreadNode *lchild, *rchild;
    int ltag, rtag;
} ThreadNode, *ThreadTree;

typedef struct Index {
    ThreadTree index;
} Index;

void InThread(ThreadTree p, Index *pre) {
    if (p != NULL) {
        InThread(p->lchild, pre);
        if (p->lchild == NULL) {
            p->lchild = pre->index;
            p->ltag = 1;
        }

        if (pre->index != NULL && pre->index->rchild == NULL) {
            pre->index->rchild = p;
            pre->index->rtag = 1;
        }
        pre->index = p;
        InThread(p->rchild, pre);
    }

}


void CreateThread(ThreadTree T) {
    Index *pre = (Index *) malloc(sizeof(Index));
    pre->index = NULL;
    if (T != NULL) {
        InThread(T, pre);
        pre->index->rchild = NULL;
        pre->index->rtag = 1;
        free(pre);
    }
}

ThreadNode *Firstnode(ThreadNode *p) {
    while (p->ltag == 0) {
        p = p->lchild;
    }
    return p;
}


ThreadNode *Nextnode(ThreadNode *p) {
    if (p->rtag == 0) {
        return Firstnode(p->rchild);

    } else return p->rchild;
}

void Inorder(ThreadNode *T) {
    for (ThreadNode *p = Firstnode(T); p != NULL; p = Nextnode(p)) {
        printf("%d ", p->data);
    }
}

int main() {

    ThreadTree node1 = (ThreadTree) malloc(sizeof(ThreadNode));
    node1->data = 3;
    ThreadNode node2;
    ThreadNode node3;
    ThreadNode node4;
    node2.data = 4;
    node3.data = 8;
    node4.data = 10;
    node1->lchild = &node2;
    node1->rchild = &node3;
    node2.lchild = &node4;
//    node2.rchild = node3.lchild = node3.rchild = node4.rchild = node4.lchild = NULL;
//    print_tree(node1);
    node2.rchild = node3.lchild = node3.rchild = node4.rchild = node4.lchild = NULL;
    node1->rtag = node1->ltag = node2.rtag = node2.ltag = node3.rtag = node3.ltag = node4.rtag = node4.ltag = 0;

    CreateThread(node1);
    Inorder(node1);

    return 0;
}
心得体会

c语言不要总是想着用默认值
所有变量都应该先赋值在使用。这样可以避免很多不必要的麻烦。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号