【数据结构】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;
}

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

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

转载于:https://www.cnblogs.com/robotpaul/p/9978097.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值