表示法:1. 树形 2. 文氏图 3. 凹入 4. 括号
结点的度与树的度 m次树: 结点子树的个数
非终端节点,分支结点,叶节点
路径与路径长度: ki,ki1,ki2,…,kj, 结点数目减1(分支数目)
孩子结点,双亲结点,兄弟结点
结点的层次和树的高度:根节点为第一层,树的高度。
森林:
n(n
>
0)
个互不相交的树的集合,n可以为1?
树中的结点数等于所有结点的度数加
1
。
度为
m
的树中第
i
层上至多有
m
(i-1)
个结点
,
这里应有
i
≥
1
。
性质1 非空二叉树上叶结点数等于双分支结点数加1。
证明:设二叉树上叶结点数为n0,单分支结点数为n1,双分支结点数为n2,则总结点数=n0+n1+n2。在一棵二叉树中,所有结点的分支数(即度数)应等于单分支结点数加上双分支结点数的2倍,即总的分支数=n1+2n2。
由于二叉树中除根结点以外,每个结点都有惟一的一个分支指向它,因此二叉树中有:总的分支数=总结点数-1。
由上述三个等式可得:n1+2n2=n0+n1+n2-1
即:n0=n2+1
转换 以后来。
void CreateBTNode(BTNode* tree, string* str);
BTNode* FindNode(BTNode* tree, char x);
BTNode* (BTNode* p); BTNode* RChildNode(BTNode* p);
int BTNodeDepth(BTNode* tree);
void DispBTNode(BTNode* tree);
//在指定树中查找指定树节点的层次。
性质1 非空二叉树上叶结点数等于双分支结点数加1。
证明:设二叉树上叶结点数为n0,单分支结点数为n1,双分支结点数为n2,则总结点数=n0+n1+n2。在一棵二叉树中,所有结点的分支数(即度数)应等于单分支结点数加上双分支结点数的2倍,即总的分支数=n1+2n2。
由于二叉树中除根结点以外,每个结点都有惟一的一个分支指向它,因此二叉树中有:总的分支数=总结点数-1。
由上述三个等式可得:n1+2n2=n0+n1+n2-1
即:n0=n2+1
转换 以后来。
void LevelOrder(BTNode* tree)
{
BTNode* queue[100];
int front, rear;
front = rear = -1;
++rear;
queue[rear] = tree;
BTNode* tmp = NULL;
while (front != rear)
{
front = (front + 1) % 100;
cout << queue[front]->Data;
tmp = queue[front];
if (tmp->LChild != NULL)
{
rear = (rear + 1) % 100;
queue[rear] = tmp->LChild;
}
if (tmp->RChild != NULL)
{
rear = (rear + 1) % 100;
queue[rear] = tmp->RChild;
}
}
}
// 二叉树的基本运算
void CreateBTNode(BTNode* tree, string* str);
BTNode* FindNode(BTNode* tree, char x);
BTNode* (BTNode* p); BTNode* RChildNode(BTNode* p);
int BTNodeDepth(BTNode* tree);
void DispBTNode(BTNode* tree);
//在指定树中查找指定树节点的层次。
int Level(const BTNode* Tree, const BTNode* Node)
{
if (Tree == NULL)
{
return 0;
}
else if (Tree == Node)
{
return 1;
}
else
{
if (Level(Tree->LChild, Node))
{
return Level(Tree->LChild, Node) + 1;
}
else if (Level(Tree->RChild, Node))
{
return Level(Tree->RChild, Node) + 1;
}
else
{
return 0;
}
}
}
void Level(const BTNode* tree, const BTNode* Node, int &h, int lh) //lh: lasthigh.
{
if (tree == NULL)
{
h = 0;
}
else if (tree == Node)
{
h = lh + 1;
}
else
{
Level(tree->LChild, Node, h, lh + 1);
if (h == 0)
{
Level(tree->RChild, Node, h, lh + 1);
}
}
}