树和二叉树
树
树定义:是n(n≥0)个结点的有限集合T。 n=0时(没有结点),称为空树。n>0时,必有一根。其余n-1个结点可以划分成m个根的子树
一棵树是由若干棵子树构成的。
每棵树除了根结点以外,每个结点有且仅有一 个直接前驱,但可以有0个或多个直接后继。
树的多种表示法。
森林:m(m≥0)棵互不相交的树的集合。
二叉树
在二叉树中,每个结点至多有2个儿子,并且有 左、右之分。
位于左边的孩子叫做左孩子 位于右边的孩子叫做右孩子
二叉树的性质:若二叉树的层次从 1 开始计数, 则,在 二叉树的第 i 层最多有 2 ^(i-1) 个结点。( i >= 1);高度为
k 的二叉树最多有 2^(k -1) 个结点;具有 n ( n >= 1) 个结点的二叉树的高度最高为n;对任何一棵二叉树, 如果其叶结点有 n0个,
度为2的结点有 n2 个, 则有 n0=n2+1
二叉树的存储结构:
二叉树的顺序存储结构
二叉树的链式存储结构
二叉树结点及二叉树的定义:
typedef struct Node
{
DataType data;
struct Node *LChild; struct Node *RChild;
} Bitnode, *BiTree;
建树
void CreateBiTree(BiTree *bt)
{
char ch;
ch = getchar();
if(ch=='.')
*bt=NULL;
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->LChild)); //生成左子树
CreateBiTree(&((*bt)->RChild)); //生成右子树
}
}