帮忙写个二叉树的程序

来源:百度知道 编辑:UC知道 时间:2024/06/08 00:43:20
写个C程序,实现以下的功能
1 建二叉树,实现前序遍历的非递归算法
2(1)求已建好的二叉树的结点数
(2)求叶子的结点数
(3)求度为1的结点数
(4)求二叉树的深度
刚学二叉树,对于一些算法及将算法转化为可运行的程序很迷糊,希望哪位能够写出完整的程序,让我能有个参考,便于自己理解,谢了

void PreOrder_Nonrecursive(Bitree T)//先序遍历二叉树的非递归算法
{//思路为利用自己的堆栈模拟函数递归调用时栈区的变化。
InitStack(S);//初始化堆栈。参照严蔚敏编《数据结构C语言版》实现堆栈的相关功能函数,这里会用到。
Push(S,T); //根指针进栈
while(!StackEmpty(S))
{
while(Gettop(S,p)&&p)//若栈顶元素不是空指针
{
visit(p->data);//访问
push(S,p->lchild);//进入左子树
} //向左走到尽头
pop(S,p);将栈顶元素(实际上是空指针)丢弃
if(!StackEmpty(S))
{
pop(S,p);
push(S,p->rchild); //向右一步,从这个结点开始继续进行先序遍历
}
}//while
}//PreOrder_Nonrecursive

int NodeCount_BiTree(Bitree T)//求二叉树中结点的数目
{
if(!T) return 0; //递归结束条件:空树结点数为0
else return (NodeCount(T->lchild)+NodeCount(T->rchild)+1);//二叉树中结点数=左子树的结点数+右子树的结点数+根结点自己
}//NodeCount_BiTree

int LeafCount_BiTree(Bitree T)//求二叉树中叶子结点的数目
{
if(!T) return 0; //空树没有叶子
else if(!T->lchild&&!T->rchild) return 1; //叶子结点
else return Leaf_Count(T->lchil