二叉树

来源:互联网 发布: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的父结点











0 0
原创粉丝点击