• 二叉树的遍历


    二叉树的遍历

    结构体存二叉树的每个节点,先序建立二叉树,分别按照先序中序后序递归遍历输出结果

    输入格式:1 2 0 0 3 0 0

    //date:2020.4.26
    #include <bits/stdc++.h>
    using namespace std;
    typedef struct BinaryNode
    {
        int data;
        struct BinaryNode *left,*right;
    } Binode,*node;
    node createTree()
    {
        int a;
        cin>>a;
        node T;
        if(a==0)
            T=NULL;
        else
        {
            T = (node)malloc(sizeof(Binode));
            T->data=a;
            T->left=createTree();
            T->right=createTree();
        }
        return T;
    }
    preOrder(node T)
    {
        if(T!=NULL)
        {
            cout<<T->data<<" ";
            preOrder(T->left);
            preOrder(T->right);
        }
    }
    MidOrder(node T)
    {
        if(T!=NULL)
        {
            MidOrder(T->left);
            cout<<T->data<<" ";
            MidOrder(T->right);
        }
    }
    PostOrder(node T)
    {
        if(T!=NULL)
        {
            PostOrder(T->left);
            PostOrder(T->right);
            cout<<T->data<<" ";
        }
    }
    int main()
    {
        node T;
        cout<<"按先序输入二叉树:输入0代表NULL 例如 1 2 0 0 3 0 0"<<endl;
        T=createTree();
        preOrder(T);
        cout<<endl;
        MidOrder(T);
        cout<<endl;
        PostOrder(T);
        return 0;
    }

    输出结果

    1 2 3
    2 1 3
    2 3 1
    

    增加了DFS和BFS遍历的代码

    //date:2020.4.26
    #include <bits/stdc++.h>
    using namespace std;
    typedef struct BinaryNode
    {
        int data;
        struct BinaryNode *left,*right;
    } Binode,*node;
    node createTree()
    {
        int a;
        cin>>a;
        node T;
        if(a==0)
            T=NULL;
        else
        {
            T = (node)malloc(sizeof(Binode));
            T->data=a;
            T->left=createTree();
            T->right=createTree();
        }
        return T;
    }
    preOrder(node T)
    {
        if(T!=NULL)
        {
            cout<<T->data<<" ";
            preOrder(T->left);
            preOrder(T->right);
        }
    }
    MidOrder(node T)
    {
        if(T!=NULL)
        {
            MidOrder(T->left);
            cout<<T->data<<" ";
            MidOrder(T->right);
        }
    }
    PostOrder(node T)
    {
        if(T!=NULL)
        {
            PostOrder(T->left);
            PostOrder(T->right);
            cout<<T->data<<" ";
        }
    }
    void DFS(node T)
    {
        if(T!=NULL)
            cout<<T->data<<" ";
        if(T->left!=NULL)
            DFS(T->left);
        if(T->right!=NULL)
            DFS(T->right);
    }
    void BFS(node T)
    {
        queue<node> q;
        if(T!=NULL)
            q.push(T);
        while(!q.empty())
        {
            T=q.front();
            q.pop();
            cout<<T->data<<" ";
            if(T->left!=NULL)
                q.push(T->left);
            if(T->right!=NULL)
                q.push(T->right);
        }
    }
    int main()
    {
        node T;
        cout<<"按先序输入二叉树:输入0代表NULL 例如 1 2 0 0 3 0 0"<<endl;
        T=createTree();
        preOrder(T);
        cout<<endl;
        MidOrder(T);
        cout<<endl;
        PostOrder(T);
        cout<<endl;
        DFS(T);
        cout<<endl;
        BFS(T);
        return 0;
    }

    输入的二叉树是 1 2 3 0 0 0 4 0 0  

    输出结果

    1 2 3 4
    3 2 1 4
    3 2 4 1
    1 2 3 4
    1 2 4 3

  • 相关阅读:
    JS 中 原生方法 (四) --- Object
    在 JavaScript 中 prototype 和 __proto__ 有什么区别
    VueJs 源码分析 ---(一) 整体对 vuejs 框架的理解
    Node.js API 初解读(三)
    npm 包的 发布 流程
    JS 中 原生方法 (三) --- Date 日期
    JS 中 原生方法 (二) --- 数组 (修---添加ES6新增)
    Mac 下VIM配置
    css预处理器(sass)
    BFC 神奇背后的原理
  • 原文地址:https://www.cnblogs.com/someonezero/p/12782613.html
Copyright © 2020-2023  润新知