• <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}
            九九久久自然熟的香蕉图片| 久久亚洲sm情趣捆绑调教| 97久久超碰成人精品网站| 日本精品久久久中文字幕| 香蕉99久久国产综合精品宅男自 | 精品多毛少妇人妻AV免费久久 | 97精品国产91久久久久久| 久久久久国色AV免费看图片| 无码超乳爆乳中文字幕久久| 青青热久久国产久精品 | 久久国产综合精品五月天| 久久无码人妻一区二区三区| 久久久久这里只有精品| 久久精品无码一区二区三区| 亚洲精品国精品久久99热一| 欧美日韩精品久久久免费观看| 国产V亚洲V天堂无码久久久| 2021国产精品久久精品| 蜜桃麻豆www久久国产精品| 久久精品国产亚洲综合色| 男女久久久国产一区二区三区| 国产99久久久国产精品小说| 久久久精品国产Sm最大网站| 精品久久久久久无码人妻热| 久久久综合九色合综国产| 国产精品18久久久久久vr| 久久精品人人做人人妻人人玩| 亚洲精品午夜国产VA久久成人 | 日韩va亚洲va欧美va久久| 国产毛片久久久久久国产毛片| 久久久91精品国产一区二区三区| 精品久久久无码人妻中文字幕豆芽 | 超级97碰碰碰碰久久久久最新 | 久久精品国产精品亚洲毛片| 亚洲国产精品成人久久| 久久亚洲精品国产精品| 久久精品aⅴ无码中文字字幕不卡| 久久精品国产亚洲AV高清热| 国内精品久久久久影院一蜜桃| 久久99国产精品二区不卡| 国产精品嫩草影院久久|