//二叉樹先序遍歷非遞歸
void InOrderTraverse(BiTree T,SqStack s)
{
InitStack(s); //初始化棧
BiTree p = T;
Push(s,p); //樹根進(jìn)棧
while(!StackEmpty(s) || !p)
{//當(dāng)棧空或結(jié)點(diǎn)為空時(shí)結(jié)束
if(p)
{//P非空訪問結(jié)點(diǎn),結(jié)點(diǎn)進(jìn)棧,訪問該結(jié)點(diǎn)左子樹
printf("%d ",p->data);
Push(s,p);
p = p->lchild ;
}
else
{//P空結(jié)點(diǎn)出棧,訪問右子樹
Pop(s,p);
p=p->rchild ;
}
}
}
int SumYe(BiTree T)
{//求二叉樹葉結(jié)點(diǎn)數(shù)之和
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 閱讀(295)
評論(0) 編輯 收藏 引用 所屬分類:
Algorithm