青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大漠落日

while(!dead) study++;
posts - 46, comments - 126, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

二叉樹三種方式遍歷小例子

Posted on 2011-03-22 14:25 亂78糟 閱讀(1076) 評論(0)  編輯 收藏 引用 所屬分類: 算法&數據結構
  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    //構建左邊樹
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    //構建右邊樹
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遍歷并銷毀每個節點
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}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩写真在线| 另类av导航| 日韩一级不卡| 国产精品伦子伦免费视频| 宅男精品视频| 亚洲一区二区动漫| 激情婷婷欧美| 欧美激情亚洲视频| 欧美日韩免费观看一区=区三区| 99视频一区| 亚洲影视中文字幕| 永久免费视频成人| 亚洲青涩在线| 国产精品久久久久久久免费软件| 校园激情久久| 久久久久久久久久久一区| 亚洲激情中文1区| 亚洲美女诱惑| 国产偷自视频区视频一区二区| 美女精品在线| 欧美日韩视频一区二区三区| 久久福利精品| 欧美激情亚洲激情| 欧美一区二区视频在线观看| 久久亚洲精品一区| 国产精品99久久久久久宅男| 午夜精品视频网站| 日韩视频在线一区二区三区| 午夜精品久久久久久久白皮肤| 亚洲国产片色| 亚洲综合好骚| 一本色道久久综合亚洲精品高清| 亚洲手机在线| 亚洲精品孕妇| 久久超碰97人人做人人爱| 一区二区三区国产盗摄| 欧美一区二区三区四区在线观看| 亚洲老板91色精品久久| 欧美在线看片| 亚洲欧美日本日韩| 欧美国产激情| 美女精品在线| 国产日韩亚洲| 一区二区三区免费在线观看| 亚洲国内在线| 久久精品久久99精品久久| 亚洲主播在线| 欧美精品午夜| 欧美激情第三页| 精品1区2区3区4区| 欧美一级久久久久久久大片| 午夜精品久久久久久久男人的天堂 | 国产精品99久久久久久久vr| 久久久久在线| 久久久国产亚洲精品| 欧美视频官网| 亚洲免费激情| 亚洲精品乱码久久久久久久久| 久久国产手机看片| 欧美在线一二三区| 国产精品一卡二| 亚洲尤物在线| 午夜在线一区| 国产伦精品一区二区三区高清版| 一区二区三区免费看| 亚洲调教视频在线观看| 欧美区国产区| av不卡在线看| 亚洲男人天堂2024| 国产精品久久久一区麻豆最新章节 | 韩国精品久久久999| 亚洲欧美久久久| 久久99在线观看| 狠狠色狠狠色综合| 久久午夜精品一区二区| 欧美va日韩va| 亚洲日本黄色| 欧美日韩综合| 亚洲免费一在线| 欧美一区免费| 精品动漫av| 牛夜精品久久久久久久99黑人| 欧美国产高清| 一区二区福利| 国产酒店精品激情| 久久久久一区| 亚洲精品综合| 欧美在线综合视频| 一区二区在线观看视频在线观看| 欧美1区2区视频| 夜夜嗨av一区二区三区四区 | 精品动漫3d一区二区三区免费版| 巨乳诱惑日韩免费av| 亚洲福利视频网站| 亚洲一区在线免费观看| 国产日韩欧美一区二区三区在线观看 | 亚洲在线成人精品| 噜噜噜噜噜久久久久久91| 亚洲老板91色精品久久| 国产精品视频xxx| 久久青草久久| 日韩视频第一页| 久久久精品日韩欧美| 亚洲精品乱码| 国产综合久久久久久| 欧美黑人一区二区三区| 亚洲欧美日韩成人| 最新高清无码专区| 久久久噜噜噜久久狠狠50岁| 亚洲免费观看| 国产在线视频欧美| 亚洲激情另类| 国产精品影视天天线| 蜜桃久久av一区| 亚洲一区亚洲| 亚洲国产精品一区二区第一页| 午夜精品剧场| 在线综合+亚洲+欧美中文字幕| 精品成人一区二区三区| 国产精品久久久免费| 欧美风情在线观看| 久热这里只精品99re8久| 亚洲欧美综合精品久久成人| 亚洲精品乱码久久久久久蜜桃91| 久久久久免费观看| 性欧美xxxx视频在线观看| 亚洲精品一区二区网址| 伊人精品在线| 狠狠色综合网| 国产亚洲高清视频| 国产精品久久一区二区三区| 欧美日韩国产综合视频在线| 欧美.www| 免费观看久久久4p| 久久久久久成人| 久久久国产精品一区| 欧美一区二区三区四区视频 | 久久久亚洲影院你懂的| 欧美一区二视频在线免费观看| 亚洲五月六月| 一本色道久久综合亚洲精品婷婷 | 香蕉成人久久| 午夜伦欧美伦电影理论片| 亚洲一区二区三区四区在线观看| 日韩天天综合| 日韩视频免费在线| 一区二区三区成人| 亚洲自拍偷拍福利| 亚洲欧美日本日韩| 性亚洲最疯狂xxxx高清| 香蕉成人伊视频在线观看| 午夜精品偷拍| 久久精品道一区二区三区| 欧美一区在线看| 久久久人成影片一区二区三区| 久久精品成人一区二区三区蜜臀| 久久久久这里只有精品| 蜜桃精品一区二区三区| 欧美国产视频一区二区| 亚洲黑丝一区二区| 妖精视频成人观看www| 在线中文字幕一区| 性欧美暴力猛交69hd| 久久另类ts人妖一区二区| 媚黑女一区二区| 欧美日韩成人一区二区三区| 欧美无砖砖区免费| 国产日本欧美在线观看 | 欧美二区视频| 欧美日一区二区三区在线观看国产免| 欧美日韩午夜在线| 国产精品自拍三区| 在线观看日韩精品| 日韩午夜免费视频| 久久精品一二三| 亚洲第一区在线| 一区二区三区 在线观看视| 亚洲欧美在线磁力| 欧美成人综合| 国产乱码精品1区2区3区| 在线视频国内自拍亚洲视频| 99精品热视频| 久久青草欧美一区二区三区| 一本色道久久综合一区| 影音先锋亚洲一区| 亚洲视频久久| 久久一区激情| 在线视频你懂得一区二区三区| 国产人成精品一区二区三| 激情欧美一区二区三区| 亚洲欧美卡通另类91av| 女仆av观看一区| 亚洲一区二区在线免费观看视频 | 翔田千里一区二区| 欧美日韩xxxxx| 亚洲电影在线播放| 欧美专区福利在线| 99精品热视频| 欧美激情综合网| 精品1区2区|