• <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>

            Uriel's Corner

            Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
            posts - 0, comments - 50, trackbacks - 0, articles - 594
            這三題都是二叉樹的層次遍歷,就放一起吧~
            Binary Tree Level Order Traversal:裸的層次遍歷,BFS之

             1 /**
             2  * Definition for binary tree
             3  * struct TreeNode {
             4  *     int val;
             5  *     TreeNode *left;
             6  *     TreeNode *right;
             7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
             8  * };
             9  */
            10 class Solution {
            11 public:
            12     struct Que {
            13         TreeNode *pt;
            14         int depth;
            15     }que[10010];
            16     vector<vector<int> > levelOrder(TreeNode *root) {
            17         vector<vector<int> > res;
            18         if(root == NULL) return res;
            19         int l = 0, r = 1, tdepth = 0;
            20         que[0].pt = root;
            21         que[0].depth = 0;
            22         vector<int> tres;
            23         tres.push_back(root->val);
            24         res.push_back(tres);
            25         tres.clear();
            26         while(l < r) {
            27             TreeNode *tp = que[l].pt;
            28             if(tdepth < que[l].depth) {
            29                 res.push_back(tres);
            30                 tres.clear();
            31             }
            32             if(tp->left != NULL) {
            33                 que[r].pt = tp->left;
            34                 que[r].depth = que[l].depth + 1;
            35                 tres.push_back(tp->left->val);
            36                 ++r;
            37             }
            38             if(tp->right != NULL) {
            39                 que[r].pt = tp->right;
            40                 que[r].depth = que[l].depth + 1;
            41                 tres.push_back(tp->right->val);
            42                 ++r;
            43             }
            44             tdepth = que[l].depth;
            45             ++l;
            46         }
            47         if(!tres.empty()) res.push_back(tres);
            48         return res;
            49     }
            50 };

            Binary Tree Zigzag Level Order Traversal:二叉樹之字形的層次遍歷,加一個記錄節點深度的變量,然后根據深度的奇偶改變遍歷后結果的存儲順序就行
             1 /**
             2  * Definition for binary tree
             3  * struct TreeNode {
             4  *     int val;
             5  *     TreeNode *left;
             6  *     TreeNode *right;
             7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
             8  * };
             9  */
            10 class Solution {
            11 public:
            12     struct Que {
            13         TreeNode *pt;
            14         int depth;
            15     }que[10010];
            16     vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
            17         vector<vector<int> > res;
            18         if(root == NULL) return res;
            19         int l = 0, r = 1, tdepth = 0;
            20         que[0].pt = root;
            21         que[0].depth = 0;
            22         vector<int> tres;
            23         tres.push_back(root->val);
            24         res.push_back(tres);
            25         tres.clear();
            26         while(l < r) {
            27             TreeNode *tp = que[l].pt;
            28             if(tdepth < que[l].depth) {
            29                 if(!(tdepth & 1)) reverse(tres.begin(), tres.end());
            30                 res.push_back(tres);
            31                 tres.clear();
            32             }
            33             if(tp->left != NULL) {
            34                 que[r].pt = tp->left;
            35                 que[r].depth = que[l].depth + 1;
            36                 tres.push_back(tp->left->val);
            37                 ++r;
            38             }
            39             if(tp->right != NULL) {
            40                 que[r].pt = tp->right;
            41                 que[r].depth = que[l].depth + 1;
            42                 tres.push_back(tp->right->val);
            43                 ++r;
            44             }
            45             tdepth = que[l].depth;
            46             ++l;
            47         }
            48         if(!tres.empty()) {
            49             if(tdepth & 1) reverse(tres.begin(), tres.end());
            50             res.push_back(tres);
            51         }
            52         return res;
            53     }
            54 };

            Maximum Depth of Binary Tree:層次遍歷二叉樹求最大深度就行
             1 /**
             2  * Definition for binary tree
             3  * struct TreeNode {
             4  *     int val;
             5  *     TreeNode *left;
             6  *     TreeNode *right;
             7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
             8  * };
             9  */
            10 class Solution {
            11 public:
            12     struct Que {
            13         TreeNode *pt;
            14         int depth;
            15     }que[10010];
            16     int maxDepth(TreeNode *root) {
            17         if(root == NULL) return 0;
            18         int l = 0, r = 1;
            19         que[0].pt = root;
            20         que[0].depth = 1;
            21         while(l < r) {
            22             TreeNode *tp = que[l].pt;
            23             if(tp->left != NULL) {
            24                 que[r].pt = tp->left;
            25                 que[r].depth = que[l].depth + 1;
            26                 ++r;
            27             }
            28             if(tp->right != NULL) {
            29                 que[r].pt = tp->right;
            30                 que[r].depth = que[l].depth + 1;
            31                 ++r;
            32             }
            33             ++l;
            34         }
            35         return que[r - 1].depth;
            36     }
            37 };
            国产免费久久精品丫丫| 中文精品99久久国产 | 99久久精品免费看国产| 久久国产精品无码网站| 色妞色综合久久夜夜| 国产午夜免费高清久久影院| 久久精品亚洲乱码伦伦中文 | 久久亚洲美女精品国产精品| 久久亚洲国产中v天仙www| 久久久久久免费视频| 久久最近最新中文字幕大全| 亚洲综合熟女久久久30p| 久久国产高清一区二区三区| 精品国际久久久久999波多野| 久久精品无码一区二区日韩AV| 91精品国产综合久久精品| 奇米影视7777久久精品人人爽 | 久久成人精品视频| 久久久av波多野一区二区| 久久人人爽人人人人爽AV| 欧美日韩成人精品久久久免费看 | 国产精品无码久久久久久| 久久人人爽人人爽人人片AV东京热 | 久久人人爽人人爽人人片AV东京热| 久久精品国产福利国产琪琪| 久久久久中文字幕| 久久综合久久综合九色| 久久久久四虎国产精品| 久久91亚洲人成电影网站| 精品永久久福利一区二区| 日产精品久久久一区二区| 日产精品99久久久久久| 久久亚洲私人国产精品vA | 久久精品国产精品亚洲艾草网美妙| 精品久久久噜噜噜久久久| 久久久久亚洲AV无码专区体验| 精品综合久久久久久97| 久久久国产乱子伦精品作者| 久久久久久狠狠丁香| 久久99热这里只有精品国产| 欧美一级久久久久久久大|