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);
    }

    后记:

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

      唉,多积累,慢慢进步吧

  • 相关阅读:
    Codeforces Round #733
    [ZJOI2007] 时态同步(树形dp)
    最大子树和(树形dp)
    P2015 二叉苹果树
    没有上司的舞会(经典树形dp)
    P3884 [JLOI2009]二叉树问题(LCA)
    Bin Packing Problem(线段树 + multiset)
    P4281 [AHOI2008]紧急集合 / 聚会(最近公共祖先)
    P3128 [USACO15DEC]Max Flow P(LCA 树上差分)
    java中Set接口用法
  • 原文地址:https://www.cnblogs.com/daheww/p/10654832.html
Copyright © 2011-2022 走看看