二叉树基本操作(含先序插入、先序、中序、后序、层序遍历,C++实现)

#include <iostream>
#include <queue>
#define MAX_TREE_SIZE 100
#define TREEINCREMENT 10
#define OK 1
#define FALSE 0
#define TRUE 1
#define ERROR 0
typedef char ElemType;
typedef int Status;
using namespace std;

typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild, *rchild;
} BiTNode;

class BiTree
{
private:
    BiTNode *T;
    Status Create(BiTNode *&t)
    {
        ElemType ch;
        cin >> ch;
        if (ch == '#')
        {
            t = NULL;
        }
        else
        {
            t = new BiTNode;
            t->data = ch;
            Create(t->lchild);
            Create(t->rchild);
        }
    }

    Status PreOder(BiTNode *t)
    {
        if (t == NULL)
            return NULL;
        else
        {
            Visit(t);
            PreOder(t->lchild);
            PreOder(t->rchild);
        }
    }

    Status InOrder(BiTNode *t)
    {
        if (t == NULL)
            return NULL;
        else
        {
            InOrder(t->lchild);
            Visit(t);
            InOrder(t->rchild);
        }
    }

    Status PostOrder(BiTNode *t)
    {
        if (t == NULL)
            return NULL;
        else
        {
            PostOrder(t->lchild);
            PostOrder(t->rchild);
            Visit(t);
        }
    }

    void Visit(BiTNode *t)
    {
        cout << t->data << ' ';
    }

public:
    Status CreateBiTree() //按先序遍历输入二叉树中各结点的值,‘#’表示空格
    {
        Create(T);
    }

    Status PreOrderTraverse() //先序遍历二叉树
    {
        PreOder(T);
    }

    Status InOrderTraverse() //中序遍历二叉树
    {
        InOrder(T);
    }

    Status PostOrderTraverse() //后序遍历二叉树
    {
        PostOrder(T);
    }

    Status LevelOrderTraverse() //层序遍历
    {
        queue<BiTNode *> q;
        if (T != NULL)
            q.push(T);
        while (!q.empty())
        {
            Visit(q.front());
            if (q.front()->lchild)
                q.push(q.front()->lchild);
            if (q.front()->rchild)
                q.push(q.front()->rchild);
            q.pop();
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值