简单概述一下二叉树:二叉树是一种很有用的非线性结构,非空二叉树只有一个根结点,每一个结点最多有两棵子树,左子树和右子树,它具有如下几个基本性质:
性质1 在二叉树的第K层上,最多有2^(k-1)(k>=1)个结点。
性质2 深度为M的二叉树最多有(2^m)-1个结点。
性质3 在任意一颗二叉树中,度为0的结点(即叶子)总是比度为2的结点多一个。
性质4 具有n个结点的二叉树,其深度至少为[log以2为底的n]+1。
满二叉树:除最后一层外,每一层上的所有结点都有两个子结点。
完全二叉树:除最后一层外,每一层上的结点数均达到最大值;最后一层上只缺少右边的若干结点。
性质5 具有n个结点的完全二叉树的深度[log以2为底的n]+1。
二叉树通常采用链式存储结构,除非是满二叉树或完全二叉树适合用顺序存储。
二叉树链表类
#include<iostream>
using namespace std;
template <class T>
struct Btnode
{
T d;
Btnode *lchild;
Btnode *rchild;
};
template <class T>
class Binary_Tree
{
private:
Btnode<T> * BT;
public:
Binary_Tree(){BT=NULL;retu