• 二叉树的创建与遍历


     
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef enum {Link, Thread} PointerTag;
    
    typedef struct BiThrNode
    {
        char data;
        struct BiThrNode *lchild, *rchild;
        PointerTag ltag;
        PointerTag rtag;
    } BiThrNode, *BiThrTree;
    
    BiThrTree pre;
    
    //前序遍历 输入
    CreateBiThrTree (BiThrTree *T)         // 双重指针  (*T)指向二叉树节点    T 指向*T的位置;
    {
        char c;
        scanf ("%c", &c);
        if (' ' == c)
        {
            *T = NULL;
        }
        else
        {
            *T = (BiThrNode *)malloc(sizeof(BiThrNode));
            (*T)->data = c;
            (*T)->ltag = Link;
            (*T)->rtag = Link;
    
            CreateBiThrTree (&(*T)->lchild);      //双重指针
            CreateBiThrTree (&(*T)->rchild);
        }
    }
    
    //中序遍历线索
    InThreading (BiThrTree T)
    {
        if (T)
        {
            InThreading (T->lchild);     //递归左孩子线索化
            if (!T->lchild)            //如果该节点没有左孩子, 设置ltag 为thread,并把lchild指向前驱
            {
                T->ltag = Thread;
                T->lchild = pre;
            }
            if (!pre->rchild)
            {
                pre->rtag = Thread;
                pre->rchild = T;
            }
            pre = T;
            InThreading (T->rchild);    // 递归右孩子线索化
        }
    }
    
    InOrderThreading (BiThrTree *p, BiThrTree T)
    {
        *p =(BiThrTree) malloc(sizeof(BiThrNode));
        (*p)->ltag = Link;
        (*p)->rtag = Thread;
        (*p)->rchild = *p;
        if (!T)
        {
            (*p)->lchild = *p;
        }
        else
        {
            (*p)->lchild = T;
            pre = *p;
            InThreading(T);
            pre->rchild = *p;
            pre->rtag = Thread;
            (*p)->rchild = pre;
        }
    }
    
    int main()
    {
        BiThrTree P, T = NULL;        //指针T指向NULL
    
        CreateBiThrTree (&T);         //指针T的地址 传入。。
    
        InOrderThreading (&P, T);
    }
  • 相关阅读:
    Python基础 面向对象的基本概念
    C#版菜谱
    Ember源码学习
    AutoFac文档
    NewLife.Xcode组件资源目录
    Go语言
    调试Razor从哪里开始
    搭建一个高并发低时延系统
    ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider
    2012百度之星资格赛试题与AC代码合集
  • 原文地址:https://www.cnblogs.com/Kingpenguin/p/9948685.html
Copyright © 2020-2023  润新知