zoukankan      html  css  js  c++  java
  • 搜索二叉树(很多至今不懂的地方)

    #include<stdio.h>
    #include<stdlib.h>
    
    
    
    typedef enum { link, thread } PointerTag;
    
    //创建树的一个节点
    typedef struct BiNode {
        char data;
        struct BiNode *lchild;
        struct BiNode *rchild;
        PointerTag ltag;
        PointerTag rtag;
    }BitrNode, *BiTree;
    
    //创建一个全局变量,始终指向刚刚访问的结点
    BiTree pre; //这里可以看出  这是一个指针
    
                //创建一棵树 运用前序遍历创建 要注意区分一级指针和二级指针
    CreateThree(BiTree *T) {
        char c;
        scanf("%c", &c);
        if (' ' == c) {
            (*T) = NULL;
        }
        else {
            *T = (BitrNode *)malloc(sizeof(BitrNode));
            (*T)->data = c;
            (*T)->ltag = link; //这里先假设是成立的
            (*T)->rtag = link;
            CreateThree(&(*T)->lchild); // 这里函数的接口是个二层指针。因此这里应该是一个地址
            CreateThree(&(*T)->rchild);
    
        }
    
    }
    
    //进行中序遍历,线索化(修改ltag和指向对象)
    
    Inthreading(BiTree  T) {
        if (T != NULL) {
            Inthreading((T)->lchild); //递归,一直递归到最左的叶子
    
            if ((T)->lchild == NULL) {
                (T)->ltag = thread;
                (T)->lchild = pre;
            }
            if (pre->rchild == NULL) {
                pre->ltag = thread;
                pre->rchild = T;
            }
            pre = T;   //这一句有待考证
            Inthreading((T)->rchild); //递归,一直递归到最右的叶子
    
        }
    
    }
    
    InOrderThreading(BiTree p, BiTree T) {
    
        p = (BiTree)malloc(sizeof(BitrNode));
        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()
    {
        BiTree T;
    
        CreateThree(&T);
        InOrderThreading(pre, T);
    }
  • 相关阅读:
    Oracle notes
    jQuery笔记
    sql developer 要求enter the full pathname for java.exe
    [Error] WCF: SOAP security negotiation
    Unity
    Windows Form 开发笔记
    WP开发 资料整理
    乔迁新居:http://longwarelive.spaces.live.com/
    2008年1月1日启用 longware@live.cn
    《程序员》杂志揭晓2007软件中国年度评选
  • 原文地址:https://www.cnblogs.com/xiaochige/p/7692833.html
Copyright © 2011-2022 走看看