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]
    ]

    Solution: 1. Queue + reverse.
    2. Two stacks.
    3. Vector. Contributed by yinlinglin.

     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) return res;
    15         queue<TreeNode*> q;
    16         q.push(root);
    17         q.push(NULL); // NULL is used to gap between levels
    18         vector<int> level;
    19         bool left2right = true;
    20         while(true) {
    21             TreeNode* node = q.front(); q.pop();
    22             if(node) {
    23                 level.push_back(node->val);
    24                 if(node->left) q.push(node->left);
    25                 if(node->right) q.push(node->right);
    26             }
    27             else {
    28                 if(!left2right) {
    29                     reverse(level.begin(), level.end());
    30                 }
    31                 left2right = !left2right;
    32                 res.push_back(level);
    33                 level.clear();
    34                 if(q.empty()) break;
    35                 q.push(NULL);
    36             }
    37         }
    38     }
    39 };
  • 相关阅读:
    小程序-自定义组件
    51Nod
    CodeForces
    JSON、闭包和原型----透视Javascript语言核心
    转载:动态规划法总结
    to初学者:从汉诺塔问题深入理解递归算法思想
    不知‘时间复杂度’所云的看过来
    盲点流水账记录
    常用序列化协议总结
    排序——了解总体以及插入排序
  • 原文地址:https://www.cnblogs.com/zhengjiankang/p/3665695.html
Copyright © 2011-2022 走看看