zoukankan      html  css  js  c++  java
  • 剑指Offer——按之字形顺序打印二叉树

    题目描述:

    请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。


    分析:

    我们都知道二叉树的层次遍历用的是队列。

    但是这个的子树的结点是先进后出的,所以我们使用栈更加方便。

    而且为了方便,我用了两个栈,因为不是每一次都是先进左子树再进右子树的。


    代码:

     1 /*
     2 struct TreeNode {
     3     int val;
     4     struct TreeNode *left;
     5     struct TreeNode *right;
     6     TreeNode(int x) :
     7             val(x), left(NULL), right(NULL) {
     8     }
     9 };
    10 */
    11 class Solution {
    12 public:
    13     vector<vector<int> > Print(TreeNode* pRoot) {
    14         vector<vector<int> > res;
    15         if(pRoot == NULL) return res;
    16         stack<TreeNode*> s1, s2;
    17         s1.push(pRoot);
    18         while(1) {
    19             vector<int> v1;
    20             while(!s1.empty()) {
    21                 TreeNode* top = s1.top();
    22                 v1.push_back(top->val);
    23                 if(top->left) s2.push(top->left);
    24                 if(top->right) s2.push(top->right);
    25                 s1.pop();
    26             }
    27             res.push_back(v1);
    28             if(s2.empty()) break;
    29             vector<int> v2;
    30             while(!s2.empty()) {
    31                 TreeNode* top = s2.top();
    32                 v2.push_back(top->val);
    33                 if(top->right) s1.push(top->right);
    34                 if(top->left) s1.push(top->left);
    35                 s2.pop();
    36             }
    37             res.push_back(v2);
    38             if(s1.empty()) break;
    39         }
    40         return res;
    41     }
    42 };
  • 相关阅读:
    浅谈Javascript数据属性与访问器属性
    深入浅析JavaScript中的constructor
    javascript 继承
    很认真的聊一聊程序员的自我修养
    JavaScript数据属性与访问器属性
    Js中的数据属性和访问器属性
    [javascript基础]constructor与prototype
    C# System.Net.Mail
    Execl (转)导入导出execl 全
    delegate 委托方法
  • 原文地址:https://www.cnblogs.com/jacen789/p/7747803.html
Copyright © 2011-2022 走看看