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

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:二叉树前序遍历中序遍历和后序遍历

二叉树前序遍历非递归写法