数据结构实验——树
实验要求
1.查找并绘制自己家族的族谱二叉树;
2.族谱二叉树的建立(树的深度要>=4);
3.三种不同遍历算法遍历此二叉树;
4.统计二叉树的深度,输出叶子结点的信息。
树的建立
void CreateBiTree(BiTree& T)
{//按先序次序输入二叉树中的结点的值(一个字符),创建二叉链表表示二插树T
char ch;
cin >> ch;
if (ch == '#') T = NULL;
else
{
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
中序遍历
void InOrderTraverse(BiTree T)
{//中序遍历
if (T)
{
InOrderTraverse(T->lchild);
printf("%c ", T->data);
InOrderTraverse(T->rchild);
}
}
前序遍历
void BeOrderTraverse(BiTree T)
{//前序遍历
if (T)
{
printf("%c ", T->data);
BeOrderTraverse(T->lchild);
BeOrderTraverse(T->rchild);
}
}
后序遍历
void AfOrderTraverse(BiTree T)
{//后序遍历
if (T)
{
AfOrderTraverse(T->lchild);
AfOrderTraverse(T->rchild);
printf("%c ", T->data);
}
}
计算深度
int Depth(BiTree T)
{
int m;
int n;
if (T == NULL) return 0;
else
{
m = Depth(T->lchild);
n = Depth(T->rchild);
if (m > n) return( m + 1);
else return(n + 1);
}
return 0;
}
计算叶子结点数
int Leafcount(BiTree T, int& num)
{
if (T)
{
if (T->lchild == NULL && T->rchild == NULL)
num++;
Leafcount(T->lchild, num);
Leafcount(T->rchild, num);
}
return num;
}
由前序遍历求叶子节点
void PreOrder(BiTree T)//先序遍历,输出叶子节点
{
if (T != NULL)
{
if (T->lchild == NULL && T->rchild == NULL)
printf("%c ", T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}