zoukankan      html  css  js  c++  java
  • 面试:C++二叉树遍历(递归/非递归)

      1 #include <vector>
      2 #include <stack>
      3 #include <queue>
      4 using namespace std;
      5 
      6 
      7 struct TreeNode{
      8     int val;
      9     TreeNode* left;
     10     TreeNode* right;
     11     TreeNode(int x):val(x),left(nullptr),right(nullptr){};
     12 };
     13 
     14 void preOrder(TreeNode* root,vector<int>& res){
     15     if(root == nullptr) return;
     16     res.push_back(root->val);
     17     preOrder(root->left,res);
     18     preOrder(root->right,res);
     19 }
     20 
     21 void inOrder(TreeNode* root,vector<int>& res){
     22     if(root == nullptr) return;
     23     inOrder(root->left,res);
     24     res.push_back(root->val);
     25     inOrder(root->right,res);
     26 }
     27 
     28 void postOrder(TreeNode* root,vector<int>& res){
     29     if(root == nullptr) return;
     30     postOrder(root->left,res);
     31     postOrder(root->right,res);
     32     res.push_back(root->val);
     33 }
     34 
     35 
     36 vector<int> preOrder(TreeNode* root){
     37     vector<int> res;
     38     if(root == nullptr) return res;
     39 
     40     stack<TreeNode*> st;
     41     TreeNode* cur = root;
     42     while(cur || !st.empty()){
     43         while(cur){
     44             res.push_back(cur->val);
     45             st.push(cur);
     46             cur = cur->left;
     47         }
     48         if(!st.empty()){
     49             cur = st.top();
     50             st.pop();
     51             cur = cur->right;
     52         }
     53     }
     54     return res;
     55 }
     56 
     57 
     58 vector<int> inOrder(TreeNode* root){
     59     vector<int> res;
     60     if(root==nullptr) return res;
     61 
     62     stack<TreeNode*> st;
     63     TreeNode* cur = root;
     64     while(cur || !st.empty()){
     65         while(cur){
     66             st.push(cur);
     67             cur = cur->left;
     68         }
     69         if(!st.empty()){
     70             cur = st.top();
     71             st.pop();
     72             res.push_back(cur->val);
     73             cur = cur->right;
     74         }
     75     }
     76     return res;
     77 }
     78 
     79 
     80 vector<int> postOrder(TreeNode* root){
     81     vector<int> res;
     82     if(root == nullptr) return res;
     83 
     84     stack<TreeNode*> st;
     85     TreeNode* cur = root;
     86     while(cur){
     87         st.push(cur);
     88         cur = cur->left;
     89     }
     90 
     91     TreeNode* lastVisited = nullptr;
     92     while(!st.empty()){
     93         cur = st.top();
     94         st.pop();
     95         if(cur->right == nullptr || cur->right == lastVisited){
     96             res.push_back(cur->val);
     97             lastVisited = cur;
     98         }else{
     99             st.push(cur);
    100             cur = cur->right;
    101             while(cur){
    102                 st.push(cur);
    103                 cur = cur->left;
    104             }
    105         }
    106     }
    107     return res;
    108 }
    109 
    110 vector<int> levelOrder(TreeNode* root){
    111     vector<int> res;
    112     if(root == nullptr) return res;
    113 
    114     queue<TreeNode*> q;
    115     q.push(root);
    116     while(!q.empty()){
    117         size_t n = q.size();
    118         for(size_t i=0;i<n;i++){
    119             TreeNode* cur = q.back();
    120             q.pop();
    121             res.push_back(cur->val);
    122             if(cur->left) q.push(cur->left);
    123             if(cur->right) q.push(cur->right);
    124         }
    125     }
    126     return res;
    127 }
  • 相关阅读:
    浅析项目失败的原因
    软件项目失败的五大原因
    敏捷软件开发最佳实践之Scrum站立会议
    精益原则之延迟决策
    三条常见的质量管理策略
    固定报价项目中,如何进行客户期望管理
    关于软件需求必须知道的事情
    PMP备考感触和经验
    软件开发过程中的7大浪费(译)
    精益软件开发七原则之我见
  • 原文地址:https://www.cnblogs.com/wxquare/p/6005733.html
Copyright © 2011-2022 走看看