zoukankan      html  css  js  c++  java
  • 面试题11:二叉树的非递归前、中、后、层级遍历

     1 #include <vector>
     2 #include <stack>
     3 using std::vector;
     4 
     5 struct TreeNode {
     6     int val;
     7     TreeNode* left;
     8     TreeNode* right;
     9     TreeNode(int x) :
    10             val(x), left(nullptr), right(nullptr) {
    11     }
    12 };
    13 
    14 vector<int> preOrder(TreeNode* root) {
    15     vector<int> res;
    16     if (root == nullptr)
    17         return res;
    18 
    19     std::stack<TreeNode*> s;
    20     TreeNode* p = root;
    21     while (p || !s.empty()) {
    22         while (p) {
    23             res.push_back(p->val);
    24             s.push(p);
    25             p = p->left;
    26         }
    27 
    28         if (!s.empty()) {
    29             p = s.top();
    30             s.pop();
    31             p = p->right;
    32         }
    33     }
    34     return res;
    35 }
    36 
    37 vector<int> inOrder(TreeNode* root) {
    38     vector<int> res;
    39     if (root == nullptr)
    40         return res;
    41     TreeNode* p = root;
    42     std::stack<TreeNode*> s;
    43 
    44     while (p || !s.empty()) {
    45 
    46         while (p) {
    47             s.push(p);
    48             p = p->left;
    49         }
    50 
    51         if (!s.empty()) {
    52             p = s.top();
    53             s.pop();
    54             res.push_back(p->val);
    55             p = p->right;
    56         }
    57     }
    58     return res;
    59 }
    60 
    61 vector<int> postorderTraversal(TreeNode* root) {
    62     vector<int> res;
    63     if (root == nullptr)
    64         return res;
    65 
    66     std::stack<TreeNode*> s;
    67     TreeNode* cur = root;
    68     TreeNode* pre = nullptr;
    69 
    70     while (cur) {
    71         s.push(cur);
    72         cur = cur->left;
    73     }
    74 
    75     while (!s.empty()) {
    76         cur = s.top();
    77         s.pop();
    78         if (cur->right == nullptr || cur->right == pre) {
    79             res.push_back(cur->val);
    80             pre = cur;
    81         } else {
    82             s.push(cur);
    83             cur = cur->right;
    84             while (cur) {
    85                 s.push(cur);
    86                 cur = cur->left;
    87             }
    88         }
    89     }
    90     return res;
    91 }
  • 相关阅读:
    第十讲:网络虚拟化(二)
    第九讲:网络虚拟化(一)
    第十二讲:存储虚拟化(二)
    第十一讲:存储虚拟化(一)
    第八讲:I/O虚拟化
    第七讲:内存虚拟化
    第六讲:CPU虚拟化
    node to traverse cannot be null!
    利用 squid 反向代理提高网站性能(转载)
    Servlet自动加载
  • 原文地址:https://www.cnblogs.com/wxquare/p/6852437.html
Copyright © 2011-2022 走看看