.[題目分析]二叉樹先序序列的最後一個結點若二叉樹有右子樹則是右子樹中最右下的葉子結點若無右子樹僅有左子樹則是左子樹最右下的葉子結點若二叉樹無左右子樹則返回根結點
BiTree LastNode(BiTree bt)//返回二叉樹bt先序序列的最後一個結點的指針
{BiTree p=bt;
if(bt==null) return(null);
else while(p)
if (p>rchild) p=p>rchild; //若右子樹不空沿右子樹向下
else if (p>lchild) p=p>lchild; //右子樹空左子樹不空沿左子樹向下
else return(p); //p即為所求
}//結束lastnode
[題目分析]高度為K的二叉樹按順序方式存儲要占用K 個存儲單元與實際結點個數n關系不大對不是完全二叉樹的二叉樹要增加虛結點使其在形態上成為完全二叉樹
int m=K ; //全局變量
void PreOrder(ElemType bt[]i )
//遞歸遍歷以順序方式存儲的二叉樹bt i是根結點下標(初始調用時為)
{if (i<=m) //設虛結點以表示
{printf(bt[i]) //訪問根結點
if(*i<=m && bt[*i]!=) PreOrder(bt*i); //先序遍歷左子樹
if(*i+<=m && bt[*i+]!=) PreOrder(bt*i+);// 先序遍歷右子樹
} }//結束PreOrder
二叉樹中最大序號的葉子結點是在順序存儲方式下編號最大的結點
void Ancesstor(ElemType bt[]) //打印最大序號葉子結點的全部祖先
{c=m; while(bt[c]==) c; //找最大序號葉子結點該結點存儲時在最後
f=c/; //c的雙親結點f
while(f!=) //從結點c的雙親結點直到根結點路徑上所有結點均為祖先結點
{printf(bt[f]); f=f/; }//逆序輸出最老的祖先最後輸出
} //結束
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23717.html