二叉树存储(链式存储)

230 阅读1分钟

二叉树的链式存储实现

上篇记录了下二叉树顺序存储的实现 这篇记录下链式存储的

  • 如下图是一个普通的二叉树 将它稍作处理 为了后续方便存储 (带#表示当前结点是空的)

image.png

  • 构造结构体
typedef struct BiTNode{

    char data;

    struct BiTNode * lchild;

    struct BiTNode * rchild;

}BiTNode,*BiTree;
  • 初始化二叉树
void CreateBiTree(BiTree *T){

    char ch = str[indexs++];

    if (ch == '#') {

        *T = NULL;

    } else {

        *T = (BiTree)malloc(sizeof(BiTNode));

        (*T)->data = ch;

        /*

         创建左右子树

         */

        CreateBiTree(&(*T)->lchild);

        CreateBiTree(&(*T)->rchild);

        

    }

}

\
  • 创建二叉树
void CreateBiTree(BiTree *T){
    char ch = str[indexs++];
    if (ch == '#') {
        *T = NULL;
    } **else** {
        *T = (BiTree)malloc(sizeof(BiTNode));
        (*T)->data = ch;
        /*
         创建左右子树
         */
        CreateBiTree(&(*T)->lchild);
        CreateBiTree(&(*T)->rchild);
   }
}
  • 前序遍历
void PreOrderTraverse(BiTree T){
    if (T==NULL) {
        return;
    }
    printf("%c ",T->data);
    PreOrderTraverse(T->lchild);
    PreOrderTraverse(T->rchild);

}
  • 中序遍历
void InOrderTraverse(BiTree T){
    if (T==NULL) {
        return;;
    }
    InOrderTraverse(T->lchild);
    printf("%c ",T->data);
    InOrderTraverse(T->rchild);
}
  • 后序遍历
void PostOrderTraverse(BiTree T){
    if (T==NULL) {
        return;
    }
    InOrderTraverse(T->lchild);
    InOrderTraverse(T->rchild);
    printf("%c ",T->data);
}