zoukankan      html  css  js  c++  java
  • Binary Tree Preorder Traversal——经典算法的迭代求解(前序,中序,后序都在这里了)

    先序遍历,用递归来做,简单的不能再简单了。代码如下:

    (以下仅实现了先序遍历,中序遍历类似,后序遍历和这两个思路不一样,具体详见Binary Tree Postorder Traversal

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    private:
          vector<int> res;
    public:
        void getOrder(TreeNode* node)
        {
            if(node==NULL)
                return ;
            else
            {
                res.push_back(node->val);
                getOrder(node->left);
                getOrder(node->right);
            }
            return ;
        }
        vector<int> preorderTraversal(TreeNode* root) {
            if(root==NULL)
                return res;
            res.push_back(root->val);
            getOrder(root->left);
            getOrder(root->right);
            return res;
            
        }
    };

    但是题目要求用迭代来做。

    迭代的代码如下:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
            vector<int> res;
            stack<TreeNode*> stk;
            while(root!=NULL||!stk.empty())
            {
               if(root!=NULL)
               {
                   res.push_back(root->val);
                   stk.push(root);
                   root=root->left;
               }
               else
               {
                   root=stk.top()->right;
                   stk.pop();
               }
                
            }
            return res;
        }
    };

      中序遍历迭代代码如下:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
           vector<int>  res;
           stack<TreeNode*> stk;
           while(root!=NULL||!stk.empty())
           {
               if(root!=NULL)
               {
                   stk.push(root);
                   root=root->left;
               }
               else
               {
                   root=stk.top();
                   res.push_back(root->val);
                   stk.pop();
                   root=root->right;
               }
           }
           return res;
        }
    };

      

  • 相关阅读:
    【Android】Camera 使用浅析
    【Android】Camera 使用浅析
    每日学习总结<二> 2015-9-1
    每日学习总结<一> 2015-8-31
    【原创】利用typeface实现不同字体的调用显示及String转换为Unicode
    Android 软件开发之如何使用Eclipse Debug调试程序详解及Eclipse常用快捷键(转)
    Flask学习之 会话控制
    Vue组件介绍及开发
    Flask学习之 会话控制
    Flask学习之 请求与响应
  • 原文地址:https://www.cnblogs.com/qiaozhoulin/p/4746221.html
Copyright © 2011-2022 走看看