zoukankan      html  css  js  c++  java
  • 【Leetcode】【Medium】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]
    ]

    解题思路:

    按层遍历,建立两个栈,一个保存当前结点,一个按照Z型保存下一层结点。

    使用一个bool变量来标注每次读取子节点的方向;

    代码:

     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>> zigzagLevelOrder(TreeNode* root) {
    13         vector<vector<int> > ret;
    14         stack<TreeNode*> cur_layer;
    15         stack<TreeNode*> next_layer;
    16         cur_layer.push(root);
    17         bool dirt = false;
    18         
    19         if (!root)
    20             return ret;
    21         
    22         while (!cur_layer.empty()) {
    23             vector<int> layer_val;
    24             while (!cur_layer.empty()) {
    25                 TreeNode* node = cur_layer.top();
    26                 cur_layer.pop();
    27                 layer_val.push_back(node->val);
    28                 if (dirt) {
    29                     if (node->right)
    30                         next_layer.push(node->right);
    31                     if (node->left)
    32                         next_layer.push(node->left);
    33                 } else {
    34                     if (node->left)
    35                         next_layer.push(node->left);
    36                     if (node->right)
    37                         next_layer.push(node->right);
    38                 }
    39             }
    40             ret.push_back(layer_val);
    41             swap(cur_layer, next_layer);
    42             dirt = !dirt;
    43         }
    44         return ret;
    45     }
    46 };
  • 相关阅读:
    Apache基本设置
    主流无线传输技术GPRS与CDMA之对比
    光波分复用系统(WDM)技术要求
    IPv6报头结构以及与IPv4的比较
    网络设计师训练资料
    802.11b/11a/11g横向比较
    交换机术语
    无线局域网技术白皮书
    无线网络基础知识
    校验码
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4518951.html
Copyright © 2011-2022 走看看