//二叉樹先序遍歷非遞歸
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 閱讀(300)
評論(0) 編輯 收藏 引用 所屬分類:
Algorithm