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


  • 相关阅读:
    HTML5 文件处理之FileAPI简介整理
    HTML5 TypeArray和Unicode 字符之间转换
    HTML5 ArrayBufferView之DataView
    HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
    JavaScript Unicode字符操作
    HTML5 类型数组TypeArray(一)
    HTML之Data URL(转)
    Wpf TextChanged事件导致死循环,事件触发循环问题
    JavaWeb学习笔记:ServletConfig()和ServletContext()
    Effective Java读书笔记
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6957211.html
Copyright © 2011-2022 走看看