• 【数据结构】3-1 二叉树的先序创建及遍历操作


    二叉树真的令人头大

    #include<iostream>
    using namespace std;
    template <class T>
    struct BTNode//二叉链表结点结构
    {
        T data; //二叉树中的元素
        BTNode<T> *lchild, *rchild;
    };
    template <class T>
    class BTree   //二叉树的二叉链表类
    {
    private:
        BTNode<T> *root; //二叉树的根指针
        BTNode<T>* pre_create();// 先序创建二叉链表结构二叉树r
        void preOrder(BTNode<T>*r);//先序遍历二叉树r
        void inOrder(BTNode<T>*r);//中序遍历二叉树r
        void postOrder(BTNode<T>*r);//后序遍历二叉树r
        void numOfNode(BTNode<T>*r, int &cont);//统计二叉树r中的结点个数
    public:
        BTree() { root = NULL; }
        void preCreat();
        void preOrder() { cout << "先序遍历:"; preOrder(root); cout << endl; }//先序遍历二叉树
        void inOrder() { cout << "中序遍历:"; inOrder(root); cout << endl;}//中序遍历二叉树
        void postOrder() { cout << "后序遍历:"; postOrder(root); cout << endl;}//后序遍历二叉树
        int numOfNode();//统计二叉树中的结点个数
    };
    template<class T>
    BTNode<T>* BTree<T>::pre_create()
    {
        char ch;
        cin >> ch;
        BTNode<T> *p;
        if (ch =='#')
        {
            p = NULL;
        }
        else
        {
            p = new BTNode<T>();
            p->data = ch;
            p->lchild = pre_create();
            p->rchild = pre_create();
        }
        return p;
    }
    template<class T>
    void BTree<T>::inOrder(BTNode<T>*r)
    {
        if (r!=NULL)
        {
            inOrder(r->lchild);
            cout << r->data << " ";
            inOrder(r->rchild);
        }
    }
    template<class T>
    void BTree<T>::postOrder(BTNode<T>*r)
    {
        if (r!=NULL)
        {
            postOrder(r->lchild);
            postOrder(r->rchild);
            cout << r->data << " ";
        }
    }
    template<class T>
    void BTree<T>::preOrder(BTNode<T>*r)
    {
        if (r!=NULL)
        {
            cout << r->data << " ";
            preOrder(r->lchild);
            preOrder(r->rchild);
        }
    }
    template<class T>
    void BTree<T>::numOfNode(BTNode<T>*r,int &cont)
    {
        
        if (r)
        {
            cont++;
            numOfNode(r->lchild,cont);
            numOfNode(r->rchild,cont);
        }
    }
    template<class T>
    void BTree<T>::preCreat()
    {
        cout << "请按照先序的方式输入要创建的二叉树,空用#表示" << endl;
        root = pre_create();
        cout << "二叉树创建成功!" << endl;
    
    }
    template<class T>
    int BTree<T>::numOfNode()
    {
        int cont = 0;
        numOfNode(root, cont);
        return cont;
    
    }
    
    int main()
    {
        BTree<char> test;
        test.preCreat();
        test.preOrder();
        test.inOrder();
        test.postOrder();
        cout << "二叉树中的节点个数为:" << test.numOfNode() << endl;
        system("pause");
        return 0;
    }

    输入格式为先序遍历的结果,空用#表示

    会自动输出创建好的二叉树的先序,中序,后序遍历的结果

  • 相关阅读:
    基于uds的bootloader开发中的意外情况
    TC275的overlay的使用示例-用于XCP标定
    react + antd Table实现表格数据合并
    vue-cli引入静态资源报错及引入方法
    react + antd form表单验证自定义验证validator根据后台接口判断验证
    react hook + antd upload 通过fileList控制文件列表展示status为uploading
    create react app创建的react项目+typescript配置项目根路径
    react hook+antd实现点击发送验证码功能
    react.js antd-table 可编辑表格验证
    ant-design-pro protable 树形表格默认展开
  • 原文地址:https://www.cnblogs.com/robotpaul/p/9978097.html
Copyright © 2020-2023  润新知