• leetcode 102


    102. Binary Tree Level Order Traversal

    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,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7
    

     

    return its level order traversal as:

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

    层次遍历二叉树,并要求将每一层的数放在二维数组的同一行中。
    思路:采用两个队列,队列1存放上一层结点,队列1中的结点一次出队并在队列2存放下一层结点,另外用一个数组记录队列1中结点的值,这些值就属于一层。
       将数组中的值放入二维数组相应的行,并清空数组。队列2中的结点出队并一次放入队列1中。

    代码如下:
     1 /**
     2  * Definition for a binary tree node.
     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>> lorder;
    14         if(root == NULL)
    15         {
    16             return lorder;
    17         }
    18         queue<TreeNode*> q;
    19         q.push(root);
    20         vector<int> level_tmp2;
    21         while(!q.empty())
    22         {
    23             level_tmp2.clear();
    24             queue<TreeNode*> level_tmp1;
    25             TreeNode* node = q.front();
    26             int size = q.size();
    27             
    28             for(int i = 0; i < size; i++)
    29             {
    30                 TreeNode* node = q.front();
    31                 q.pop();
    32                 if(node->left)
    33                 {
    34                     level_tmp1.push(node->left);
    35                 }
    36                 if(node->right)
    37                 {
    38                     level_tmp1.push(node->right);
    39                 }
    40                 level_tmp2.push_back(node->val);
    41             }
    42             while(!level_tmp1.empty())
    43             {
    44                 q.push(level_tmp1.front());
    45                 level_tmp1.pop();
    46             }
    47             lorder.push_back(level_tmp2);
    48         }
    49        return lorder; 
    50     }
    51 };
     
  • 相关阅读:
    struts2解决动态多文件上传的问题(上传文件与数据库字段一一对应)(转)
    Android应用如何开机自启动、自启动失败原因
    android操作ini工具类
    C++#define的用法(含特殊)
    c指针
    WP7备注(34)(UpdateSourceTrigger|ValidatesOnExceptions|NotifyOnValidationError)
    WP7备注(30)(数据绑定基本)
    WP7备注(38)(VisualStateManager)
    WP7备注(39)(ResourceDictionary)
    WP7备注(35)(Vector Graphics|Raster Graphics)
  • 原文地址:https://www.cnblogs.com/shellfishsplace/p/5867752.html
Copyright © 2020-2023  润新知