二叉树前,中,后统一非递归版本(只改变顺序)

Posted 顾文繁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树前,中,后统一非递归版本(只改变顺序)相关的知识,希望对你有一定的参考价值。

先序遍历

vector<int> preorderTraversal(TreeNode* root) 
        if(!root) return ;
        vector<int> result;
        stack<TreeNode*> stk;
        stk.push(root);
        while(!stk.empty())
            TreeNode* node = stk.top();
            stk.pop();
            if(node)
                if(node -> right)
                    stk.push(node -> right);
                
                if(node -> left)
                    stk.push(node -> left);
                 
                stk.push(node);
                stk.push(nullptr);
            else
                result.push_back(stk.top()->val);
                stk.pop();
            
        
        return result;
    

中序遍历

vector<int> inorderTraversal(TreeNode* root) 
        if(!root) return ;
        vector<int> result;
        stack<TreeNode*> stk;
        stk.push(root);
        while(!stk.empty())
            TreeNode* node = stk.top();
            stk.pop();
            if(node)
                if(node -> right)
                    stk.push(node -> right);
                
                stk.push(node);
                stk.push(nullptr);
                if(node -> left)
                    stk.push(node -> left);
                 
            else
                result.push_back(stk.top()->val);
                stk.pop();
            
        
        return result;
    

后序遍历

vector<int> postorderTraversal(TreeNode* root) 
        if(!root) return ;
        vector<int> result;
        stack<TreeNode*> stk;
        stk.push(root);
        while(!stk.empty())
            TreeNode* node = stk.top();
            stk.pop();
            if(node)
                stk.push(node);
                stk.push(nullptr);
                if(node -> right)
                    stk.push(node -> right);
                
                if(node -> left)
                    stk.push(node -> left);
                 
            else
                result.push_back(stk.top()->val);
                stk.pop();
            
        
        return result;
    

以上是关于二叉树前,中,后统一非递归版本(只改变顺序)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树前序中序后序遍历(非递归统一解法)

二叉树前序遍历递归和非递归解法

二叉树前中后层次遍历的非递归法

二叉树前序后序和后序遍历(非递归实现)

数据结构35:二叉树前序遍历中序遍历和后序遍历

二叉树前中后层次遍历