zoukankan      html  css  js  c++  java
  • LintCode 二叉树的遍历 (非递归)

    前序:

    class Solution {
    public:
        /**
         * @param root: The root of binary tree.
         * @return: Preorder in vector which contains node values.
         */
        vector<int> preorderTraversal(TreeNode *root) {
            // write your code here
            stack<TreeNode*> s;
            vector<int> res;
            while (root!= nullptr || !s.empty()) {
                while (root != nullptr) {
                    res.push_back(root->val);
                    s.push(root);
                    root = root->left;
                }
                if (!s.empty()) {
                    root = s.top();
                    s.pop();
                    root = root->right;
                }
            }
            return res;
        }
    };

    中序:

    class Solution {
        /**
         * @param root: The root of binary tree.
         * @return: Inorder in vector which contains node values.
         */
    public:
        vector<int> inorderTraversal(TreeNode *root) {
            // write your code here
            stack<TreeNode *> s;
            vector<int> res;
            while (root!=nullptr || !s.empty()) {
                while (root != nullptr){
                    s.push(root);
                    root = root->left;
                }
                if (!s.empty()) {
                    root = s.top();
                    res.push_back(root->val);
                    s.pop();
                    root = root ->right;
                }
            }
            return res;
        }
    };



    兴许:

    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     */
    class Solution {
        /**
         * @param root: The root of binary tree.
         * @return: Postorder in vector which contains node values.
         */
    public:
        vector<int> postorderTraversal(TreeNode *root) {
            // write your code here
            vector<int> res;
            stack<TreeNode*> s;
            TreeNode * cur;
            TreeNode *pre = nullptr;
            if (root == nullptr) {
                return res;
            }
            s.push(root);
            while (!s.empty()) {
                cur = s.top();
                if ((cur->left == nullptr && cur->right == nullptr) || (pre != nullptr && (pre==cur->left || pre == cur->right))) {
                    res.push_back(cur->val);
                    s.pop();
                    pre = cur;
            }
            else {
                if (cur->right != nullptr) {
                    s.push(cur->right);
                }
                if (cur->left != nullptr) {
                    s.push(cur->left);
                }
                }
            }
            return res;
        }
        
    };
    


  • 相关阅读:
    “孤立”用户
    MongoDB 维护Replica Set
    Design7:数据删除设计
    abap取中值的函数
    REPLACE...IN.....WITH.... 的使用
    ABAP中RETURN与EXIT语句的区别
    在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
    Extract Datasets
    事件
    计算字符串长度的实例
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6957211.html
Copyright © 2011-2022 走看看