2023年寧夏回族自治區資料總結綱要

2021-12-21 04:52:48 字數 1033 閱讀 9129

1、後序遍歷最後訪問根結點,即在遞迴演算法中,根是壓在棧底的。採用後序非遞迴演算法,棧中存放二叉樹結點的指標,當訪問到某結點時,棧中所有元素均為該結點的祖先。本題要找p和q 的最近共同祖先結點r ,不失一般性,設p在q的左邊。

後序遍歷必然先遍歷到結點p,棧中元素均為p的祖先。將棧拷入另一輔助棧中。再繼續遍歷到結點q時,將棧中元素從棧頂開始逐個到輔助棧中去匹配,第乙個匹配(即相等)的元素就是結點p 和q的最近公共祖先。

typedef struct

stack;

stack s,s1;//棧,容量夠大

bitree ancestor(bitree root,p,q,r)//求二叉樹上結點p和q的最近的共同祖先結點r。

//沿左分枝向下

if(bt==p) //不失一般性,假定p在q的左側,遇結點p時,棧中元素均為p的祖先結點

//將棧s的元素轉入輔助棧s1 儲存

if(bt==q) //找到q 結點。

for(i=top;i>0;i--)//;將棧中元素的樹結點到s1去匹配

}while(top!=0 && s[top].tag==1) top退棧

if (top!=0){s[top].tag=1;bt=s[top].t->rchild;} //沿右分枝向下遍歷

}//結束while(bt!=null ||top>0)

return(null);//q、p無公共祖先

}//結束ancestor

2、由二叉樹的前序遍歷和中序遍歷序列能確定唯一的一棵二叉樹,下面程式的作用是實現由已知某二叉樹的前序遍歷和中序遍歷序列,生成一棵用二叉鍊錶表示的二叉樹並列印出後序遍歷序列,請寫出程式所缺的語句。

#define max 100

typedef struct node

tnode;

char pred[max],inod[max];

main(int argc,int **ar**)

tnode *restore(char *ppos,char *ipos,int n)

postorder(tnode*ptr)

2023年寧夏回族自治區資料總結摘要

1 define maxsize 棧空間容量 void inouts int s maxsize s是元素為整數的棧,本演算法進行入棧和退棧操作。else s top x x入棧 else 讀入的整數等於 1時退棧。else printf 出棧元素是 d n s top 演算法結 2 給出折半查詢的...

2023年寧夏回族自治區資料總結大綱

1 給定n個村莊之間的交通圖,若村莊i和j之間有道路,則將頂點i和j用邊連線,邊上的wij表示這條道路的長度,現在要從這n個村莊中選擇乙個村莊建一所醫院,問這所醫院應建在哪個村莊,才能使離醫院最遠的村莊到醫院的路程最短?試設計乙個解答上述問題的演算法,並應用該演算法解答如圖所示的例項。20分 voi...

2023年寧夏回族自治區資料總結入門

1 對二叉樹的某層上的結點進行運算,採用佇列結構按層次遍歷最適宜。int leafklevel bitree bt,int k 求二叉樹bt 的第k k 1 層上葉子結點個數 last移到指向下層最右一元素 if level k return leaf層數大於k 後退出執行 while 結束leaf...