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


  • 相关阅读:
    「板子」环形带限制的子段和
    【模版】拓扑排序
    【模板】点分治
    扬声大笑出门去,我辈岂是蓬蒿人
    JAVA JDK(3)—— jdk7特性
    电路原理 —— 三相电路(1.5)
    JAVA JDK(2)—— jdk6特性
    数据结构 —— 栈和队列
    电路原理(六) —— 正弦稳态电路分析(1)
    静电场(完) —— 静电场的环路定理 电势
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6957211.html
Copyright © 2011-2022 走看看