//二叉树先序遍历非递归
void InOrderTraverse(BiTree T,SqStack s)
{
InitStack(s); //初始化栈
BiTree p = T;
Push(s,p); //树根进栈
while(!StackEmpty(s) || !p)
{//当栈空或结点为空时结束
if(p)
{//P非空访问结点,结点进栈,访问该结点左子树
printf("%d ",p->data);
Push(s,p);
p = p->lchild ;
}
else
{//P空结点出栈,访问右子树
Pop(s,p);
p=p->rchild ;
}
}
}
int SumYe(BiTree T)
{//求二叉树叶结点数之和
if(!T) return 0;
if(!T->lchild && !T->rchild ) return 1;
return SumYe(T->lchild)+SumYe(T->rchild);
}
int HightTree(BiTree T)
{//求二叉树高
int hl = 0;//记录左子树高
int hr = 0;//记录右子树高
if(!T) return 0;
hl = HightTree(T->lchild);
hr = HightTree(T->rchild);
return (hl>hr) ? hl+1 : hr+1 ;
}
posted on 2009-03-19 00:09
chatler 阅读(274)
评论(0) 编辑 收藏 引用 所属分类:
Algorithm