zoukankan      html  css  js  c++  java
  • 【数据结构】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;
    }

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

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

  • 相关阅读:
    单例 全局变量
    平安亲人 测试数据
    UIButton
    apple id
    背景图的按钮
    大头针飘移问题
    图文并茂Windows系统使用XAMPP搭建本地mysql数据库导入数据库并使用node.js访问数据库
    JS原生上传文件,读取文件格式,控制文件只可以上传某些格式,并使用fileReader转换格式
    今天学到的新知识使用localtunnel实现内网穿透,感觉很神奇哇~~
    在Mac OS上将Node.js连接到XAMPP MySQL服务器一直报错error connecting: Error: connect ECONNREFUSED
  • 原文地址:https://www.cnblogs.com/robotpaul/p/9978097.html
Copyright © 2011-2022 走看看