zoukankan      html  css  js  c++  java
  • 【leetcode】Binary Tree Level Order Traversal I & II

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its level order traversal as:

    [
      [3],
      [9,20],
      [15,7]
    ]

    分层遍历二叉树,用BFS即可

    class Solution {
    public:
        vector<vector<int>> levelOrder(TreeNode* root) {
            queue<TreeNode*> Q;
            vector<vector<int>> ans;
            Q.push(root);
            while(!Q.empty())
            {
                int e = Q.size(); //当前层的结束位置
                vector<int> partans;
                for(int i = 0; i < e; i++)
                {
                    TreeNode * p = Q.front();
                    Q.pop();
                    if(NULL != p)
                    {
                        partans.push_back(p->val);
                        Q.push(p->left);
                        Q.push(p->right);
                    }
                }
                if(!partans.empty())
                    ans.push_back(partans);
            }
            return ans;
        }
    };

    网上DFS的代码:

    class Solution {
    protected:
        vector<vector<int>> ans;
        void dfs(TreeNode *root, int height){
            if (root == NULL) 
                return;
            while (ans.size() <= height)
                ans.push_back(vector<int>());
            ans[height].push_back(root->val);
            dfs(root->left, height + 1);
            dfs(root->right, height + 1);
        }
    
    public:
        vector<vector<int>> levelOrder(TreeNode* root) {
           dfs(root, 0);
            return ans;    
        }
    };

    Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its bottom-up level order traversal as:

    [
      [15,7],
      [9,20],
      [3]
    ]

    跟上面只是顺序变了,加个reverse就行了。

  • 相关阅读:
    洛谷 P2384 最短路
    洛谷 P2910 [USACO08OPEN]寻宝之路Clear And Present Danger
    POJ 3264 Balanced Lineup
    洛谷 P1892 团伙
    洛谷 P1724 东风早谷苗
    P1129 [ZJOI2007]矩阵游戏
    P1894 [USACO4.2]完美的牛栏The Perfect Stall
    Poj 3041 Asteroids
    P3377 【模板】左偏树(可并堆)
    P1613 跑路
  • 原文地址:https://www.cnblogs.com/dplearning/p/4627247.html
Copyright © 2011-2022 走看看