• 二叉树的非递归遍历(先序, 中序, 后序)


    先序遍历:

    /**
     * Definition for binary tree
     * 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) {
            stack<TreeNode *> st;
            vector<int> result;
            if(root != NULL)
                st.push(root);
            else
                return result;
            while(!st.empty()){
                TreeNode *node = st.top();
                st.pop();
                result.push_back(node->val);
                if(node->right != NULL)
                    st.push(node->right);
                if(node->left != NULL)
                    st.push(node->left);
            }
            return result;
        }
    };
    

     中序遍历:

    /**
     * Definition for binary tree
     * 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> result;
            stack<TreeNode *> st;
            if(root == NULL)
                return result;
            if(root->right != NULL)
                st.push(root->right);
            st.push(root);
            TreeNode* node = root->left;
            while(node != NULL){
                if(node->right != NULL)
                    st.push(node->right);
                st.push(node);
                node = node->left;
            }
            while(!st.empty()){
                node = st.top();
                st.pop();
                result.push_back(node->val);
                if(!st.empty() && st.top() == node->right){
                    node = st.top();
                    st.pop();
                    while(node != NULL){
                        if(node->right != NULL)
                            st.push(node->right);
                        st.push(node);
                        node = node->left;
                    }
                }
            }
            return result;
        }
    };
    

     后序遍历:

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<int> postorderTraversal(TreeNode *root) {
            vector<int> result;
            stack<TreeNode *> st;
            TreeNode *node = root;
            if(node == NULL)
                return result;
            st.push(node);
            if(node->right != NULL)
                st.push(node->right);
            if(node->left != NULL)
                st.push(node->left);
            TreeNode *lastNode = NULL;
            while(!st.empty()){
                node = st.top();
                st.pop();
                if(node->left == NULL && node->right == NULL){
                    result.push_back(node->val);
                    lastNode = node;
                }
                else if(lastNode != NULL && (lastNode == node->left || lastNode == node->right)){
                    result.push_back(node->val);
                    lastNode = node;
                }
                else {
                    st.push(node);
                    if(node->right != NULL)
                    st.push(node->right);
                    if(node->left != NULL)
                        st.push(node->left);
                }
            }
            return result;
        }
    };
    
  • 相关阅读:
    MySQL慢查询优化问题解决办法
    Jetpack的ViewModel与LiveData
    Jetpack的ViewModel与LiveData总结
    跟大家分享Entity Framework使用Code First方式如何连接到现有数据库
    SharePoint2010主题和样式揭秘(1)
    gitlab备份命令
    通过自定义字符串内插处理程序(InterpolatedStringHandler)和CallerArgumentExpression特性来实现一个好玩的场景
    Node.js基础入门第一天
    走进WPF之绘制冰墩墩
    Node.js基础入门第二天
  • 原文地址:https://www.cnblogs.com/hustxujinkang/p/4346864.html
Copyright © 2020-2023  润新知