zoukankan      html  css  js  c++  java
  • 二叉树的前序,中序遍历

    前序递归于循环

    #include <iostream>
    #include <stack>
    using namespace std;
    
    struct TreeNode
    {
        int val;
        TreeNode *left,*right;
    };
    
    void create(TreeNode *&p)
    {
        int k;
        cin>>k; //1 2 0 0 3 0 0;
        if(k!=0)
        {
            p=new TreeNode;
            p->val=k;
            create(p->left);
            create(p->right);
        }
        else
            p=NULL;
    }
    
    void preorder1(TreeNode *p)
    {
        if(p)
        {
            cout<<p->val;
            preorder1(p->left);
            preorder1(p->right);
        }
    }
    
    void preorder2(TreeNode *root)
    {
        stack<TreeNode*> s;
        TreeNode *p=root;
        while(p||!s.empty())
        {
            if(p)
            {
                s.push(p);
                cout<<p->val;
                p=p->left;
            }
            else
            {
                p=s.top();
                s.pop();
                p=p->right;
            }
        }
    }

    中序递归与循环

    void inorder1(TreeNode *p)
    {
        if(p)
        {
            inorder1(p->left);
            cout<<p->val;
            inorder1(p->right);
        }
    }
    
    void inorder2(TreeNode *p)
    {
        stack<TreeNode*> s;
        while(p||!s.empty())
        {
            if(p)
            {
                s.push(p);
                p=p->left;
            }
            else
            {
                p=s.top();
                cout<<p->val;
                s.pop();
                p=p->right;
            }
        }
    }
    
    int main()
    {
        TreeNode *root=new TreeNode;
        create(root);
        //preorder1(root);
        preorder2(root);
        //inorder1(root);
        inorder2(root);
        return 0;
    }

     层次优先遍历

    void levelorder(TreeNode *root)
    {
        deque<TreeNode*> d;
        TreeNode *p=root;
        d.push_back(p);
        while(!d.empty())
        {
            p=d.front();
            cout<<p->val;
            d.pop_front();
            if(p->left)
                d.push_back(p->left);
            if(p->right)
                d.push_back(p->right);
        }
    }

    深度优先遍历

    void depthorder(TreeNode *root)
    {
        stack<TreeNode*> s;
        TreeNode *p=root;
        s.push(p);
        while(!s.empty())
        {
            p=s.top();
            cout<<p->val;
            s.pop();
            if(p->right)
                s.push(p->right);
            if(p->left)
                s.push(p->left);
        }
    }
  • 相关阅读:
    本地启动项目后cookie跨域获取不到的处理方式
    相对URL:协议名跨域的一种处理方式
    window.open方法被浏览器拦截的处理方式
    高维前缀和
    比较函数大小
    链式前向星
    并查集
    Kruskal算法
    读书笔记 UltraGrid(4)
    读书笔记 UltraGrid(12)
  • 原文地址:https://www.cnblogs.com/home123/p/7295912.html
Copyright © 2011-2022 走看看