zoukankan      html  css  js  c++  java
  • 二叉树的遍历

    二叉树的遍历

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

    输入格式: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

  • 相关阅读:
    关于对话框创建与销毁的虚函数用法
    控件属性设置注意事项
    删除非空文件夹下所有内容方法
    CString类使用技巧
    视图间通信方法
    CTreeCtrl控件使用技巧
    MFC MDI 遍历打开的所有文档
    将datagrid的数据源到出导excel
    ASP.NET 給一組控件賦值 範例.
    ASP.NET Resouce Kit
  • 原文地址:https://www.cnblogs.com/someonezero/p/12782613.html
Copyright © 2011-2022 走看看