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


  • 相关阅读:
    组合模式及C++实现
    YUV422(UYVY)转RGB565源代码及其讲解.md
    会用errno,事半功倍
    可变参数宏
    camera理论基础和工作原理
    !!!??? 2.3 核心模块与应用程序的对比
    KVM与VMware的性能比较
    单片机中定时器与计数器的区别
    编译器对变量的内存分配方式
    【转载】Modelsim 与Vivado联合仿真版本对应问题
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6957211.html
Copyright © 2011-2022 走看看