前言
学习了栈和队列后,我们接着在数据结构的海洋中遨游。这时的我已经被各种栈和队列折腾的快不行了,然而,当学习了树之后,才发现自己还是太年轻,跟树比起来,栈和队列是那么的和谐与友好。先来小试牛刀一把,看看最简单的二叉树是怎么实现的:
二叉树的实现
二叉树是节点的有限集合,他或者为空,或者有一个根节点及两颗互不相交的左右子树构成,而左右子树有都是二叉树。写到这里,是不是已经体会到了一点二叉树与递归的暧昧关系。
若一棵树的任意一层节点数都达到了最大值,则这棵二叉树称为满二叉树。
而如果将满二叉树自右向左依次删掉几个节点(注意不要跳过节点),那样的树就是完全二叉树。
二叉树的常用性质
1. 一棵非空二叉树的第i层上最多有个节点(i>=1)。
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;