手撕二叉树 非递归 前序中序后序遍历

复制代码
#include <bits/stdc++.h>
using namespace std;

struct TreeNode {
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
    TreeNode(int val) :val(val), left(nullptr), right(nullptr){}
};

vector<int> preorder(TreeNode* root) {
    vector<int> ans;
    stack<TreeNode*> s;
    if (root == NULL)
        return ans;
    s.push(root);
    while (!s.empty()) {
        TreeNode* cur = s.top();
        s.pop();
        ans.push_back(cur->val);
        if (cur->right)
            s.push(cur->right);
        if (cur->left)
            s.push(cur->left);
    }
    return ans;
}

vector<int> inorder(TreeNode* root) {

    vector<int> ans;
    stack<TreeNode*> s;
    while (root || !s.empty()) {
        while (root) {
            s.push(root);
            root = root->left;
        }
        TreeNode* cur = s.top();
        s.pop();
        ans.push_back(cur->val);
        root = cur->right;
    }
    return ans;
}

vector<int> postorder(TreeNode* root) {
    vector<int> ans;
    stack<TreeNode*> s;
    TreeNode* pre = NULL;
    while (root || !s.empty()) {
        while (root) {
            s.push(root);
            root = root->left;
        }
        TreeNode* cur = s.top();
        s.pop();
        if (cur->right == NULL || cur->right == pre) {
            ans.push_back(cur->val);
            pre = cur;
        }
        else {
            s.push(cur);
            root = cur->right;
        }
    }
    return ans;
}

int main() {


    TreeNode* a1 = new TreeNode(1);
    TreeNode* a2 = new TreeNode(2);
    TreeNode* a3 = new TreeNode(3);
    a1->left = a2;
    a1->right = a3;

    vector<int> pre = preorder(a1);
    vector<int> in = inorder(a1);
    vector<int> post = postorder(a1);
    for (int i = 0;i < pre.size();i++)
        cout << pre[i] << " ";
    cout << endl;
    for (int i = 0;i < in.size();i++)
        cout << in[i] << " ";
    cout << endl;
    for (int i = 0;i < post.size();i++)
        cout << post[i] << " ";
    cout << endl;
    return 0;
}
复制代码

 

posted @   SuperTonyy  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示