二叉树的链接实现及基本操作(C++)

本文介绍了二叉树的概念,包括满二叉树和完全二叉树的定义,以及二叉树的常用性质。重点讲解了二叉树的C++实现,包括构建和遍历二叉树的代码,并提供了判断是否为完全二叉树的方法。
摘要由CSDN通过智能技术生成

前言

学习了栈和队列后,我们接着在数据结构的海洋中遨游。这时的我已经被各种栈和队列折腾的快不行了,然而,当学习了树之后,才发现自己还是太年轻,跟树比起来,栈和队列是那么的和谐与友好。先来小试牛刀一把,看看最简单的二叉树是怎么实现的:

二叉树的实现

二叉树是节点的有限集合,他或者为空,或者有一个根节点及两颗互不相交的左右子树构成,而左右子树有都是二叉树。写到这里,是不是已经体会到了一点二叉树与递归的暧昧关系。

若一棵树的任意一层节点数都达到了最大值,则这棵二叉树称为满二叉树。

而如果将满二叉树自右向左依次删掉几个节点(注意不要跳过节点),那样的树就是完全二叉树。

FullBT CompleteBT.jpg

二叉树的常用性质

1. 一棵非空二叉树的第i层上最多有2^{i-1}个节点(i>=1)。

2. 一棵高度为k的二叉树,最多有2^{k} - 1个节点。

3. 对于一棵非空二叉树,如果叶子节点数为a,度为2的节点数为吧b,则a = b + 1。

4. 具有n个节点的完全二叉树的高度为k = [log2(n)] + 1。(其中[ ]指不比里面数大的最大整数)

说了这么多,下面就来看看具体的C++实现:

#include <iostream>

using namespace std;

//父类

template<class elemType>
class queue {
public:
    virtual bool isEmpty() = 0;
    virtual void enQueue(const elemType &x) = 0;
    virtual elemType deQueue() = 0;
    virtual elemType getHead() = 0;
    virtual ~queue(){};
};

template<class elemType>
class linkQueue: public queue<elemType>
{
private:
    struct node{
        elemType data;
        node *next;
        node(const elemType &x, node *N = NULL){
            data = x;
            next = N;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值