zoukankan      html  css  js  c++  java
  • LeetCode Binary Tree Preorder Traversal 先根遍历

    题意:给一棵树,求其先根遍历的结果。

    思路:

    (1)深搜法:

     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<int> preorderTraversal(TreeNode* root) {
    13         if(!root)  return vector<int>();
    14         vector<int> ans(1,root->val);
    15         vector<int> tmp=preorderTraversal(root->left);
    16         ans.insert(ans.end(),tmp.begin(),tmp.end());
    17         tmp=preorderTraversal(root->right);
    18         ans.insert(ans.end(),tmp.begin(),tmp.end());
    19         return ans;
    20     }
    21 
    22 };
    AC代码

    (2)依然是深搜法:

     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<int> ans;
    13     void DFS(TreeNode* t)
    14     {
    15         if(!t)  return;
    16         ans.push_back(t->val);
    17         DFS(t->left);
    18         DFS(t->right);
    19     }
    20     vector<int> preorderTraversal(TreeNode* root) {
    21         DFS(root);
    22         return ans;
    23     }
    24 };
    AC代码

    (3)迭代法:

     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<int> preorderTraversal(TreeNode* root) {
    13         if(!root)  return vector<int>();
    14 
    15         stack<pair<TreeNode*,int>>  stac;
    16         stac.push(make_pair(root,0));//第二个参数用于记录其已经遍历了左/右孩子
    17         vector<int> ans;
    18         while( !stac.empty() )
    19         {
    20             TreeNode* cur=stac.top().first;
    21             if( stac.top().second==0 )  ans.push_back(cur->val);
    22 
    23             if(cur->left && stac.top().second==0)//没有遍历过孩子的进来
    24             {
    25                 cur=cur->left;
    26                 stac.top().second=1;
    27                 stac.push(make_pair(cur,0));
    28             }
    29             else if(cur->right && stac.top().second<2)//遍历过左孩子或者没有左孩子的才进来
    30             {
    31                 cur=cur->right;
    32                 stac.top().second=2;
    33                 stac.push(make_pair(cur,0));
    34             }
    35             else    stac.pop();//以上两个都进不去,要么遍历完,要么没有孩子
    36         }
    37         return ans;
    38     }
    39 };
    AC代码

    (4)更叼的迭代法:

     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<int> preorderTraversal(TreeNode* root) {
    13         if(!root)  return vector<int>();
    14 
    15         vector<int> ans;
    16         stack<TreeNode *>  stac;
    17         stac.push(root);
    18 
    19         while( !stac.empty() )
    20         {
    21             TreeNode *t=stac.top();
    22             ans.push_back(t->val);
    23             stac.pop();//只需要孩子都压栈,父亲无用
    24             if(t->right)    stac.push(t->right);
    25             if(t->left)     stac.push(t->left);
    26         }
    27         return ans;
    28     }
    29 };
    AC代码
  • 相关阅读:
    javascript:void(0)是什么意思 天高地厚
    C#开发 WinForm中窗体显示和窗体传值相关知识
    c#在WinForm中重写ProgressBar控件(带%的显示)
    flash在C#中的应用
    c# winform 关于DataGridView的一些操作
    winform中输入数据的验证
    RadioButton和CheckBox
    Manifest文件的配置
    简单程序用于熟悉Activity生命周期
    Activity的生命周期
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4674723.html
Copyright © 2011-2022 走看看