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;
    }

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

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

  • 相关阅读:
    【学习笔记】Hive
    《深入浅出数据分析》笔记
    SQL vs. HQL 语法对比
    log4net日志使用方法
    NLog日志使用方法
    VS2010,C#项目改动后无法编译
    Jquery easyui的datagrid在初始化的时候会请求两次URL?
    【硬件】Realtek RTL9210固件部分参数翻译及移动硬盘WinToGo推荐调优方案
    【小记】RedHat8(CentOS) 下连接数据库ODBC报 SSL Error:141A318A 问题
    【小记】[新手常见错误] C++ 指针的引用
  • 原文地址:https://www.cnblogs.com/robotpaul/p/9978097.html
Copyright © 2011-2022 走看看