zoukankan      html  css  js  c++  java
  • 数据结构_C语言_二叉树先序、中序、后序遍历

    # include <stdio.h>
    # include <stdlib.h>
    
    typedef struct BiTreeNode {
        char data;
        struct BiTreeNode * lchild;
        struct BiTreeNode * rchild;
    }BTNode, * pBTNode;
    
    pBTNode createBTree();
    void assign(pBTNode * ppn, char data, pBTNode plc, pBTNode prc);
    void PreTraverse(pBTNode pt);
    void InTraverse(pBTNode pt);
    void PostTraverse(pBTNode pt);
    
    int main(void) {
        pBTNode root = createBTree();
    //    printf("[root] data->%c    lchild->%d    rchild->%d    add=%d
    ", root->data, root->lchild, root->rchild, root);
    
        printf("-PreTraverse-
    ");
        PreTraverse(root);
        printf("
    ");
    
        printf("-InTraverse-
    ");
        InTraverse(root);
        printf("
    ");
    
        printf("-PostTraverse-
    ");
        PostTraverse(root);
        printf("
    ");
    
        return 0;
    }
    
    pBTNode createBTree() {
        pBTNode p1 = (pBTNode)malloc(sizeof(BTNode));
        pBTNode p2 = (pBTNode)malloc(sizeof(BTNode));
        pBTNode p3 = (pBTNode)malloc(sizeof(BTNode));
        pBTNode p4 = (pBTNode)malloc(sizeof(BTNode));
        pBTNode p5 = (pBTNode)malloc(sizeof(BTNode));
        pBTNode p6 = (pBTNode)malloc(sizeof(BTNode));
    
        assign(&p1, '1', p2, p5);
        assign(&p2, '2', p3, p4);
        assign(&p3, '3', NULL, NULL);
        assign(&p4, '4', NULL, NULL);
        assign(&p5, '5', p6, NULL);
        assign(&p6, '6', NULL, NULL);
    /*
        printf("[p1] data->%c    lchild->%d    rchild->%d    add=%d
    ", p1->data, p1->lchild, p1->rchild, p1);
        printf("[p2] data->%c    lchild->%d    rchild->%d    add=%d
    ", p2->data, p2->lchild, p2->rchild, p2);
        printf("[p3] data->%c    lchild->%d    rchild->%d    add=%d
    ", p3->data, p3->lchild, p3->rchild, p3);
        printf("[p4] data->%c    lchild->%d    rchild->%d    add=%d
    ", p4->data, p4->lchild, p4->rchild, p4);
        printf("[p5] data->%c    lchild->%d    rchild->%d    add=%d
    ", p5->data, p5->lchild, p5->rchild, p5);
        printf("[p6] data->%c    lchild->%d    rchild->%d    add=%d
    ", p6->data, p6->lchild, p6->rchild, p6);
    */
        return p1;
    }
    
    void assign(pBTNode * ppn, char data, pBTNode pl, pBTNode pr) {
        (*ppn)->data = data;
        (*ppn)->lchild = pl;
        (*ppn)->rchild = pr;
    }
    
    void PreTraverse(pBTNode pt) {
        if (pt == NULL) return;
    
        printf("%c
    ", pt->data);
        PreTraverse(pt->lchild);
        PreTraverse(pt->rchild);
    }
    
    void InTraverse(pBTNode pt) {
        if (pt == NULL) return;
    
        InTraverse(pt->lchild);
        printf("%c
    ", pt->data);
        InTraverse(pt->rchild);
    }
    
    void PostTraverse(pBTNode pt) {
        if (pt == NULL) return;
    
        PostTraverse(pt->lchild);
        PostTraverse(pt->rchild);
        printf("%c
    ", pt->data);
    }

    后记:

      写代码过程中出现的几个低级错误简直蠢哭

      唉,多积累,慢慢进步吧

  • 相关阅读:
    管理者的四种不同授权风格
    centos7 未启用swap导致内存使用率过高。
    Dynamically create a div element with JavaScript/jQuery
    sql server: Parent/Child hierarchy tree view
    视频编解码系列(一)压缩编码基础常识
    mac 常用终端命令
    Linux下安装Python3.6.8
    SQL特殊字符转义
    Ehcache缓存监控
    指标管理体系设计
  • 原文地址:https://www.cnblogs.com/daheww/p/10654832.html
Copyright © 2011-2022 走看看