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

    LeetCode: 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,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its level order traversal as:

    [
      [3],
      [9,20],
      [15,7]
    ]
    
    地址:https://oj.leetcode.com/problems/binary-tree-level-order-traversal/
    算法:BFS一颗树,然后分别输出每一层的节点值。在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     vector<vector<int> > levelOrder(TreeNode *root) {
    13         if(!root)   return vector<vector<int> >();
    14         queue<TreeNode *> que;
    15         que.push(root);
    16         int push_num = 1;
    17         int pop_num  = 0;
    18         vector<vector<int> > result;
    19         vector<int> temp;
    20         int last  = 1;
    21         while(!que.empty()){
    22             TreeNode *pop_node = que.front();
    23             temp.push_back(pop_node->val);
    24             que.pop();
    25             ++pop_num;
    26             if(pop_node->left){
    27                 que.push(pop_node->left);
    28                 ++push_num;
    29             }
    30             if(pop_node->right){
    31                 que.push(pop_node->right);
    32                 ++push_num;
    33             }
    34             if(pop_num == last){
    35                 result.push_back(temp);
    36                 temp.clear();
    37                 last = push_num;
    38             }
    39         }
    40         return result;
    41     }
    42 };

    第二题:

    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]
    ]
    
    地址:https://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/
    算法:这一题要求先输出最后一层的节点。在上一题的基础上在吧结果转置一下,这样的方法会不会很不高端啊?代码:
     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> > levelOrderBottom(TreeNode *root) {
    13         if(!root)   return vector<vector<int> >();
    14         queue<TreeNode *> que;
    15         que.push(root);
    16         int push_num = 1;
    17         int pop_num  = 0;
    18         vector<vector<int> > result;
    19         vector<int> temp;
    20         int last  = 1;
    21         while(!que.empty()){
    22             TreeNode *pop_node = que.front();
    23             temp.push_back(pop_node->val);
    24             que.pop();
    25             ++pop_num;
    26             if(pop_node->left){
    27                 que.push(pop_node->left);
    28                 ++push_num;
    29             }
    30             if(pop_node->right){
    31                 que.push(pop_node->right);
    32                 ++push_num;
    33             }
    34             if(pop_num == last){
    35                 result.push_back(temp);
    36                 temp.clear();
    37                 last = push_num;
    38             }
    39         }
    40         temp.clear();
    41         int len = result.size();
    42         int half_len = len / 2;
    43         for(int i = 0; i < half_len; ++i){
    44             temp = result[i];
    45             result[i] = result[len - i - 1];
    46             result[len - i - 1] = temp;
    47         }
    48         return result;
    49     }
    50 };
  • 相关阅读:
    T-SQL取时间的不同方法
    JavaScript获取地址栏中的参数值并存入一个对象
    jquery.ocupload上传文件到指定目录
    Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(三)
    Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
    Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(一)
    Python2.x和3.x主要差异总结
    python学习视频整理
    Django-Rest-Framework 教程: 快速入门
    Django RESTful API 设计指南
  • 原文地址:https://www.cnblogs.com/boostable/p/leetcode_binary_tree_level_order_traversal.html
Copyright © 2011-2022 走看看