二叉树
来源:互联网 发布:java 命令行参数 d 编辑:程序博客网 时间:2024/06/07 22:41
二叉树
二叉树是结点有限集合,它必须满足
它是空集,它由一个根结点的左右子树构成,且其左右子树满足二叉树定义
二叉树每个结点的度不大于2
二叉树的子树有左右之分
二叉树的五种基本形态
空
一个结点
只有右子树
只有左子树
有左、右子树
二叉树的性质
二叉树中层数为i的结点之多有2^i个 (i>=0)
高度为k的二叉树中至多有2^k+1个结点(k>=0)
设t是由n个结点构成的二叉树
叶子结点的个数为n0,
度为2的结点的个数为n2
则n0 = n2 +1
满二叉树
一棵树高度为k的满二叉树,是具有(2^k+1)-1个结点且高度为k的二叉树
完全二叉树
一颗具有n个结点,高度为k的二叉树
树种所有结点对应高度为k的满二叉树中编号由1至的那些结点
设若将一颗具有n个结点的完全二叉树按层次次序从1开始编号,则队编号为i(i<=i<=n)的结点有
若i<>1,则编号为i的结点的父节的编号为i/2
若2i<=n,则编号为i的结点的左孩子的编号为2i,否则无左孩子
若2i+1<=n,则i结点的右孩子结点编号为2i+1,否则i无右孩子
具有n个结点的完全二叉树的高度是
二叉树的实现
顺序存储结构
完全二叉树的顺序存储
一般二叉树的顺序存储
链式存储
二叉树的结点结构
leftdataright
class BinTreeNode//结点结构
{
friend class BinTree;
private:
BinTreeNode *left;
BinTreeNode*right;
public:
T data;
}
//构造函数
BinTreeNode(cont T&item, BinTreeNode *lptr = NULL,BinTreeNode *rptr = NULL:data(item),left(lptr),right(rptr)){}
BinTreeNode *getleft()
{return left;}//返回左孩子
BinTreeNode *right()
{return right;}//返回右孩子
//更新结点
void setleft(BinTreeNode *l)
{left = l;}
void setright(BinTreeNode *l)
{right = R;}
class BinTree
{
private:
BinTreeNode *root; //指向根节点
T stop ; // 输入stop时,终止节点的输入
BinTreeNode *father (BinTreeNode *begin,BinTreeNode *current)
}
//从结点begin开始搜索,返回结点current的父结点