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;
        }
    };

      

  • 相关阅读:
    Springboot中enable注解
    java消息队列--ActiveMQ,RabbitMQ入门
    java中的静态和动态代理Proxy
    java源码中的注解
    java中jdbc源码解读
    sql脚本练习
    spring boot中的jave注解学习
    thymeleaf入门和学习
    职场经验:互联网公司有哪些“潜规则”?职场萌新一定要注意了!
    C/C++编程笔记:C语言错误处理方法!如何更好地处理程序的错误?
  • 原文地址:https://www.cnblogs.com/qiaozhoulin/p/4746221.html
Copyright © 2011-2022 走看看