• <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  評論-24  文章-0  trackbacks-0
            分層遍歷二叉樹說白了就是廣度優先遍歷二叉樹,但是,題目的要求是分層打印每一層的節點,這樣就有一點難度:如何區分層呢?
            其實一個比較簡單的方法就是在遍歷完一層時插入一個結束標志,這樣在訪問到一個結束標志時就可以知道該層結束,這樣就可以打印一個換行符。
            核心代碼代碼還是廣度優先遍歷:
            數據結構如下:

            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 }

            如果要只打印某一層的節點則,只需要對行結束標志計數即可:

             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 }

            代碼比較簡單,就不多講解了
            posted on 2012-09-02 22:36 myjfm 閱讀(568) 評論(0)  編輯 收藏 引用 所屬分類: 算法基礎
            久久久精品国产亚洲成人满18免费网站| 色综合久久中文字幕无码| 99久久精品无码一区二区毛片 | 久久精品国产一区二区| 久久久久亚洲精品天堂久久久久久| 久久中文字幕无码专区| 久久久久久亚洲精品成人| 办公室久久精品| 综合久久给合久久狠狠狠97色| 久久久91人妻无码精品蜜桃HD| 久久青青草原亚洲av无码app | 日韩精品久久无码中文字幕| 2022年国产精品久久久久 | 久久久久免费看成人影片| 久久乐国产精品亚洲综合| 久久久久久久久久久久中文字幕 | 久久午夜伦鲁片免费无码| 久久只这里是精品66| 久久这里只精品国产99热| 色综合久久久久无码专区| 精品人妻伦九区久久AAA片69| 久久久噜噜噜久久熟女AA片| 色天使久久综合网天天| 精品久久久无码中文字幕天天| 99精品国产在热久久| 99久久国语露脸精品国产| 人妻久久久一区二区三区| 久久婷婷人人澡人人爽人人爱| 久久精品?ⅴ无码中文字幕| 色综合久久综精品| 狠狠久久综合| 亚洲精品国精品久久99热| 久久久久黑人强伦姧人妻| 久久91精品综合国产首页| 久久高潮一级毛片免费| 国内精品久久久久久久影视麻豆 | 国产aⅴ激情无码久久| 久久亚洲精品成人无码网站| 无码乱码观看精品久久| 久久精品国产99国产精品导航| 亚洲欧美国产日韩综合久久|