• <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>
            隨筆-80  評(píng)論-24  文章-0  trackbacks-0
            分層遍歷二叉樹(shù)說(shuō)白了就是廣度優(yōu)先遍歷二叉樹(shù),但是,題目的要求是分層打印每一層的節(jié)點(diǎn),這樣就有一點(diǎn)難度:如何區(qū)分層呢?
            其實(shí)一個(gè)比較簡(jiǎn)單的方法就是在遍歷完一層時(shí)插入一個(gè)結(jié)束標(biāo)志,這樣在訪問(wèn)到一個(gè)結(jié)束標(biāo)志時(shí)就可以知道該層結(jié)束,這樣就可以打印一個(gè)換行符。
            核心代碼代碼還是廣度優(yōu)先遍歷:
            數(shù)據(jù)結(jié)構(gòu)如下:

            1 struct Node {
            2   int data;
            3   Node *left;
            4   Node *right;
            5 };
            6 

             1 void visit_by_level(Node *root) {
             2   Node *tmp;
             3   if (root == NULL) {
             4     return;
             5   }
             6   std::queue<Node *> q;
             7   q.push(root);
             8   q.push(NULL);
             9   while (!q.empty()) {
            10     tmp = q.front();
            11     q.pop();
            12     if (tmp == NULL) {
            13       printf("\n");
            14       if (!q.empty()) {
            15         q.push(NULL);
            16         continue;
            17       } else {
            18         break;
            19       }
            20     }
            21     printf("%d ", tmp->data);
            22     if (tmp->left) {
            23       q.push(tmp->left);
            24     }
            25     if (tmp->right) {
            26       q.push(tmp->right);
            27     }
            28   }
            29 }

            如果要只打印某一層的節(jié)點(diǎn)則,只需要對(duì)行結(jié)束標(biāo)志計(jì)數(shù)即可:

             1 void print_at_level(Node *root, int level) {
             2   Node *tmp;
             3   int count = 1;
             4   if (root == NULL) {
             5     return;
             6   }
             7   std::queue<Node *> q;
             8   q.push(root);
             9   q.push(NULL);
            10   while (!q.empty()) {
            11     tmp = q.front();
            12     q.pop();
            13     if (tmp == NULL) {
            14       count++;
            15       if (count == level + 1) {
            16         printf("\n");
            17       }
            18       if (!q.empty()) {
            19         q.push(NULL);
            20         continue;
            21       } else {
            22         break;
            23       }
            24     }
            25     if (count == level) {
            26       printf("%d ", tmp->data);
            27     }
            28     if (tmp->left) {
            29       q.push(tmp->left);
            30     }
            31     if (tmp->right) {
            32       q.push(tmp->right);
            33     }
            34   }
            35 }

            代碼比較簡(jiǎn)單,就不多講解了
            posted on 2012-09-02 22:36 myjfm 閱讀(579) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 算法基礎(chǔ)
            精品久久久久久久| 51久久夜色精品国产| 久久人人爽人人人人爽AV| 久久久免费精品re6| 国产成人久久激情91| 久久久人妻精品无码一区| 久久精品中文騷妇女内射| 18岁日韩内射颜射午夜久久成人| 欧美色综合久久久久久| 狠狠色婷婷久久综合频道日韩 | 亚洲国产高清精品线久久| 伊人久久综合成人网| 久久人人爽人人爽人人片AV麻豆| 久久久久亚洲av综合波多野结衣| 青青热久久综合网伊人| 新狼窝色AV性久久久久久| 久久久WWW成人| 品成人欧美大片久久国产欧美| 久久精品日日躁夜夜躁欧美| 久久精品国产WWW456C0M| 久久久久四虎国产精品| 久久久久国产精品熟女影院| 国产精品成人久久久| 思思久久99热免费精品6| 久久91综合国产91久久精品| 精品一二三区久久aaa片| 久久精品视频一| 2020国产成人久久精品| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 99久久人人爽亚洲精品美女| 久久精品99久久香蕉国产色戒| 久久国产精品无| 少妇熟女久久综合网色欲| 热99RE久久精品这里都是精品免费 | 精品综合久久久久久98| 亚洲国产天堂久久综合| 精品99久久aaa一级毛片| 精品无码久久久久久久久久| 国产精品九九久久免费视频| 久久久久无码专区亚洲av| 久久男人中文字幕资源站|