• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大漠落日

            while(!dead) study++;
            posts - 46, comments - 126, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
              1#include <stdio.h>
              2#include <stdarg.h>
              3
              4#ifndef bool
              5#define bool unsigned int
              6#define false    0
              7#define true    1
              8#endif
              9
             10#ifndef NULL
             11#define NULL    0
             12#endif
             13
             14#define traversal_output
             15
             16/* traversal order */
             17typedef enum {
             18    NLR    = 0,    /* preorder */
             19    LNR = 1,    /* inorder */
             20    LRN = 2        /* postorder */
             21}
            Order;
             22
             23typedef struct _BTNode{
             24    struct BTNode *l_child;
             25    struct BTNode *r_child;
             26    void *data;
             27}
            BTNode;
             28
             29BTNode *create_node(void)
             30{
             31    BTNode *node = (BTNode *)malloc(sizeof(BTNode));
             32    
             33    if (node != NULL) {
             34        node->data = NULL;
             35        node->l_child = NULL;
             36        node->r_child = NULL;
             37    }

             38    
             39    return node;
             40}

             41
             42void destroy_node(BTNode *node)
             43{
             44    free(node);
             45    node = NULL;
             46}

             47
             48void bt_printf(const char *fmt, )
             49{
             50#ifdef traversal_output
             51    va_list list;
             52    char buf[256];
             53    va_start(list, fmt);
             54    vsnprintf(buf, sizeof(buf), fmt, list);
             55    printf("%s", buf);
             56    va_end(list);
             57#endif
             58}

             59
             60BTNode *insert_child(BTNode *parent, bool left, void *data)
             61{
             62    BTNode *node;
             63    if (parent == NULL)    {
             64        return NULL;
             65    }

             66
             67    if ((node = create_node()) == NULL) {
             68        return NULL;
             69    }

             70
             71    node->data = data;
             72
             73    if (left) {
             74        parent->l_child = node;
             75    }

             76    else {
             77        parent->r_child = node;
             78    }

             79
             80    return node;
             81}

             82
             83void remove_child(BTNode *parent, BTNode *node, bool destroy)
             84{
             85    if (parent == NULL || node == NULL) {
             86        return;
             87    }

             88
             89    if (parent->l_child == node) {
             90        parent->l_child = NULL;
             91    }

             92    else if (parent->r_child == node) {
             93        parent->r_child = NULL;
             94    }

             95    else {
             96        return;
             97    }

             98
             99    if (destroy) {
            100        destroy_node(node);
            101    }

            102}

            103
            104BTNode *NLR_search(BTNode *parent, void *data)
            105{
            106    BTNode *node = NULL;
            107
            108    if (parent == NULL) {
            109        return NULL;
            110    }

            111    
            112    bt_printf("->%d\n"*(int *)(parent->data));
            113
            114    //首先訪問中間
            115    if (parent->data == data){
            116        return parent;
            117    }

            118    
            119    if ((node = NLR_search(parent->l_child, data)) == NULL) {
            120        return NLR_search(parent->r_child, data);
            121    }

            122    return node;
            123}

            124
            125BTNode *LNR_search(BTNode *parent, void *data)
            126{
            127    BTNode *node = NULL;
            128
            129    if (parent == NULL) {
            130        return NULL;
            131    }

            132
            133    //首先訪問左邊
            134    node = LNR_search(parent->l_child, data);
            135
            136    bt_printf("->%d\n"*(int *)(parent->data));
            137
            138    if (node == NULL) {
            139        if (parent->data == data) {
            140            return parent;
            141        }

            142        else {
            143            return LNR_search(parent->r_child, data);
            144        }

            145    }

            146    return node;
            147}

            148
            149BTNode *LRN_search(BTNode *parent, void *data)
            150{
            151    BTNode *node = NULL;
            152
            153    if (parent == NULL) {
            154        return NULL;
            155    }

            156
            157    //首先訪問右邊
            158    node = LRN_search(parent->r_child, data);
            159
            160    if (node == NULL) {
            161        node = LRN_search(parent->l_child, data);
            162        if (node == NULL && parent->data == data) {
            163            node = parent;
            164        }

            165    }

            166
            167    bt_printf("->%d\n"*(int *)(parent->data));
            168
            169    return node;
            170}

            171
            172BTNode *find_node(BTNode *parent, void *data, Order order)
            173{
            174    if (order == NLR) {
            175        return NLR_search(parent, data);
            176    }

            177    else if (order == LNR) {
            178        return LNR_search(parent, data);
            179    }

            180    else if (order == LRN) {
            181        return LRN_search(parent, data);
            182    }

            183    return NULL;
            184}

            185
            186/*****************************************
            187 *    test code
            188 *****************************************/

            189
            190//我們來找它
            191void *target;
            192
            193BTNode *insert_binary_node(BTNode *parent, bool left, int num)
            194{
            195    int *data;
            196    data = (int *)malloc(sizeof(int));
            197    *data = num;
            198    return insert_child(parent, left, (void *)data);
            199}

            200
            201/*                    root(100)
            202 *                    /  \ 
            203 *                   1    2
            204 *                  /    / \
            205 *                 3      4   5
            206 *                / \         / \
            207 *             NULL  0   NULL NULL
            208 */

            209BTNode *create_binary_tree()
            210{
            211    BTNode *root, *node;
            212    
            213    root = create_node();
            214    root->data = (int *)malloc(sizeof(int));
            215    *(int *)(root->data) = 100;
            216
            217    //構(gòu)建左邊樹
            218    node = insert_binary_node(root, true1);
            219    node = insert_binary_node(node, true3);
            220    node = insert_binary_node(node, false0);
            221
            222    //這就是我們要找的目標
            223    target = node->data;
            224    
            225    //構(gòu)建右邊樹
            226    node = insert_binary_node(root, false2);
            227    insert_binary_node(node, true4);
            228    insert_binary_node(node, false5);
            229    
            230    return root;
            231}

            232
            233void destroy_binary_tree(BTNode *root)
            234{
            235    //用LRN遍歷并銷毀每個節(jié)點
            236}

            237
            238void main(int argc, char *argv[])
            239{
            240    BTNode *root, *node;
            241
            242    root = create_binary_tree();
            243
            244    node = find_node(root, target, NLR);
            245    printf("NLR\ttarget=%d\n\n"*(int *)(node->data));
            246
            247    node = find_node(root, target, LNR);
            248    printf("LNR\ttarget=%d\n\n"*(int *)(node->data));
            249
            250    node = find_node(root, target, LRN);
            251    printf("LRN\ttarget=%d\n\n"*(int *)(node->data));
            252
            253    destroy_binary_tree(root);
            254
            255    getchar();
            256}
            国内精品久久久人妻中文字幕| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 色噜噜狠狠先锋影音久久| 国产精品久久久99| 亚洲国产精品成人AV无码久久综合影院 | 99久久精品国产一区二区| 久久精品人人做人人妻人人玩| 久久天堂电影网| 无码精品久久一区二区三区| 久久久久亚洲av无码专区喷水| 中文字幕成人精品久久不卡| 欧美精品乱码99久久蜜桃| 久久九九亚洲精品| 伊人久久久AV老熟妇色| 久久久WWW成人| 精品亚洲综合久久中文字幕| 久久综合亚洲鲁鲁五月天| 国产精品美女久久久久av爽| 久久亚洲春色中文字幕久久久| 亚洲精品97久久中文字幕无码| 久久国产精品一区二区| 久久精品国产精品亚洲精品| 久久精品成人一区二区三区| 久久99精品久久久久久久久久| 久久久久亚洲AV无码专区首JN| 久久黄视频| 国产精品伦理久久久久久| 狠狠色噜噜狠狠狠狠狠色综合久久 | 亚洲色婷婷综合久久| 中文字幕久久亚洲一区| 久久久久亚洲AV成人网| 国产精品热久久无码av| 色综合久久精品中文字幕首页| 久久久久免费看成人影片| 亚洲中文精品久久久久久不卡| 国产精品久久久香蕉| 热RE99久久精品国产66热| 久久国产精品二国产精品| 久久久久国产精品嫩草影院| 久久成人精品| 一级A毛片免费观看久久精品|