zoukankan      html  css  js  c++  java
  • LeetCode Binary Tree Level Order Traversal

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

    水一发

    第二轮:

    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]
    ]
     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     vector<vector<int> > levelOrder(TreeNode *root) {
    13         vector<vector<int> > res;
    14         //dfs(res, root, 0);
    15         bfs(res, root);
    16         return res;
    17     }
    18     void dfs(vector<vector<int> >& res, TreeNode* root, int level) {
    19         if (root == NULL) {
    20             return;
    21         }
    22         if (level == res.size()) {
    23             res.push_back(vector<int>());
    24         }
    25         res[level].push_back(root->val);
    26         dfs(res, root->left, level + 1);
    27         dfs(res, root->right, level + 1);
    28     }
    29     
    30     void bfs(vector<vector<int> >& res, TreeNode* root) {
    31         if (root == NULL) {
    32             return;
    33         }
    34 
    35         
    36         queue<TreeNode*> que;
    37         que.push(root);
    38         
    39         while (!que.empty()) {
    40             int n = que.size();
    41             vector<int> current;
    42             for (int i=0; i<n; i++) {
    43                 TreeNode* node = que.front();
    44                 que.pop();
    45                 if (node == NULL) {
    46                     continue;
    47                 }
    48                 current.push_back(node->val);
    49                 if (node->left != NULL) {
    50                     que.push(node->left);
    51                 }
    52                 if (node->right != NULL) {
    53                     que.push(node->right);
    54                 }
    55             }
    56             res.push_back(current);
    57         }
    58     } 
    59 };
  • 相关阅读:
    DEV—【GridControl添加按钮列】
    DEV—【GridControl主从表】
    DEV—【GridControl 按钮列无法触发点击事件解决方案】
    WCF入门大致思路
    .Net应用导入、导出Excel文件
    .Net应用自定义鼠标样式
    VS打包后生成快捷方式:目标指向错误、Icon图标分辨率有误问题解决方案
    在Paint事件中绘制控件(边框)
    Android SDK Manager下载失败后 更新列表的正确设置
    关于sql分页
  • 原文地址:https://www.cnblogs.com/lailailai/p/3688675.html
Copyright © 2011-2022 走看看