zoukankan      html  css  js  c++  java
  • binary-tree-zigzag-level-order-traversal——二叉树分层输出

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

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

        3
       / 
      9  20
        /  
       15   7
    

    return its zigzag level order traversal as:

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

    confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.


    OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / 
     2   3
        /
       4
        
         5
    
    The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".
    PS:二叉树分层输出,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> > zigzagLevelOrder(TreeNode *root) {
    13         vector<vector<int>> res;
    14         if(root==NULL) return res;
    15         queue<TreeNode*> q;
    16         q.push(root);
    17         bool reverse=false;
    18         while(!q.empty()){
    19             vector<int> v;
    20             int size=q.size();
    21             for(int i=0;i<size;++i){
    22                 TreeNode *cur=q.front();
    23                 q.pop();
    24                 v.push_back(cur->val);
    25                 if(cur->left!=NULL) q.push(cur->left);
    26                 if(cur->right!=NULL) q.push(cur->right);
    27             }
    28             if(reverse){
    29                 
    30                 vector<int> tmp;
    31                 for(int i=v.size()-1;i>=0;--i){
    32                     tmp.push_back(v[i]);
    33                 }
    34                 res.push_back(tmp);
    35             }else{
    36                 res.push_back(v);
    37             }
    38             reverse=!reverse;
    39         }
    40         return res;
    41     }
    42 };
  • 相关阅读:
    Introduction to Computer Science and Programming in Python--MIT
    随机变量及其分布
    条件期望与重期望
    Fourier级数
    Windows进程通信-共享内存空间
    windows网络编程-socket
    PE文件中找导出表
    PE文件结构体-IMAGE_DATA_DIRECTORY
    RVA到FOA的转换
    PE文件结构体-IMAGE_SECTION_HEADER
  • 原文地址:https://www.cnblogs.com/zl1991/p/7045710.html
Copyright © 2011-2022 走看看