zoukankan      html  css  js  c++  java
  • 【二叉树系列 | 01】二叉树遍历

     前序遍历

     思路:前序遍历算法先访问树的根节点,然后遍历左子树,最后遍历右子树。

    解法1

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10  * };
    11  */
    12 class Solution {
    13 public:
    14     vector<int> preorderTraversal(TreeNode* root) 
    15     {
    16         if(!root) return {};
    17         stack<TreeNode *> st;
    18         vector<int> res;
    19         TreeNode *p = root;
    20         st.push(p);
    21         while(!st.empty())
    22         {
    23             p = st.top();
    24             st.pop();
    25             res.push_back(p->val);
    26             
    27             if(p->right) st.push(p->right);
    28             if(p->left) st.push(p->left);
    29         }
    30         return res;
    31     }
    32 };

    中序遍历

    思路:中序遍历的算法先遍历左子树,然后访问根节点,最后遍历右子树。

    解法1:非递归遍历

     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     8  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     9  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10  * };
    11  */
    12 class Solution {
    13 public:
    14     vector<int> inorderTraversal(TreeNode* root) 
    15     {
    16         if(!root) return {};
    17         
    18         vector<int> res;
    19         stack<TreeNode *> st;
    20         TreeNode *p = root;
    21         
    22         while(!st.empty() || p)
    23         {
    24             while(p)
    25             {
    26                 st.push(p);
    27                 p = p->left;
    28             }
    29             p = st.top();
    30             st.pop();
    31             res.push_back(p->val);
    32             
    33             p = p->right;
    34         }
    35         return res;
    36     }
    37 };
  • 相关阅读:
    JSTL日期格式化用法
    JSTL详解1
    Mybatis插入后返回主键
    JSTL详解2
    jsp与jsp之间传参数如何获取
    [转] J2EE面试题集锦(附答案)
    [转] 修炼一名程序员的职业水准(林庆忠原创)
    [转] 应聘Java笔试时可能出现问题及其答案(第三部分)
    [转] 与大家一起分享JAVA源代码查询网站
    [转] 应聘Java笔试时可能出现问题及其答案(第四部分)
  • 原文地址:https://www.cnblogs.com/sunbines/p/15264862.html
Copyright © 2011-2022 走看看