建立一颗二叉树,并计算其中的结点个数

这个博客主要介绍了二叉树的数据结构,包括前序、中序、后序和层序遍历方法,以及如何计算二叉树中的节点数量。通过示例代码展示了如何创建、遍历和释放二叉树节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include <iostream>
using namespace std;

struct BiNode
{
    char data;
    BiNode* lchild, * rchild;
};

class BiTree
{
public:
    BiTree()
    {
        count = 0;
        root = Creat();
    }
    ~BiTree()
    {
        Release(root);
    }
    void PreOrder()
    {
        PreOrder(root);
    }
    void InOrder()
    {
        InOrder(root);
    }
    void PostOrder()
    {
        PostOrder(root);
    }
    void LevelOrder()
    {
        LevelOrder(root);
    }
    
    void getcount()  //求二叉树中结点个数
    {
        if (count == 0)
        {
            cout << "NULL";
        }
        else
        {
            cout << count;
        }
    }

private:
    BiNode* Creat();
    BiNode* root;
    int count;
    void Release(BiNode* bt);
    void PreOrder(BiNode* bt);
    void InOrder(BiNode* bt);
    void PostOrder(BiNode* bt);
    void LevelOrder(BiNode* bt);
};

void BiTree::PreOrder(BiNode* bt)
{
    if (bt == NULL)  return;
    else
    {
        cout << bt->data << " ";
        PreOrder(bt->lchild);
        PreOrder(bt->rchild);
    }
}

void BiTree::InOrder(BiNode* bt)
{
    if (bt == NULL)   return;
    else
    {
        InOrder(bt->lchild);
        cout << bt->data << " ";
        InOrder(bt->rchild);
    }
}

void BiTree::PostOrder(BiNode* bt)
{
    if (bt == NULL)   return;
    else
    {
        PostOrder(bt->lchild);
        PostOrder(bt->rchild);
        cout << bt->data << " ";
    }
}

void BiTree::LevelOrder(BiNode* bt)
{
    BiNode* Q[100], * q = NULL;
    int front = -1, rear = -1;
    if (root == NULL) return;
    Q[++rear] = root;   //根指针入队
    while (front != rear)
    {
        q = Q[++front];  //出队
        cout << q->data << " ";
        if (q->lchild != NULL)  Q[++rear] = q->lchild;
        if (q->rchild != NULL)  Q[++rear] = q->rchild;
    }

}

BiNode* BiTree::Creat()
{
    BiNode* bt;
    char ch;
    cin >> ch;
    if (ch == '#')  bt = NULL;
    else
    {
        count++;
        bt = new BiNode;
        bt->data = ch;
        bt->lchild = Creat();
        bt->rchild = Creat();
        
    }
    return bt;
}


void BiTree::Release(BiNode* bt)
{
    if (bt == NULL)  return;
    else
    {
        Release(bt->lchild);
        Release(bt->rchild);
        delete bt;
    }
}


int main()
{
    BiTree T;
   
    T.getcount();

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值