DS部落格作業07 查詢

2022-05-16 20:18:30 字數 1806 閱讀 4693

在學習本章的知識前,我們得先掌握之前的二叉樹的內容,這樣才能順利的掌握課本知識。在程式設計前要先想清楚思路再開始寫**,靈活地利用書上的知識。對於書上的演算法**,我們一定要仔細鑽研每一步的具體含義和目的,在此基礎上深入的了解演算法的實現過程,在查詢時利用書中給出的各種方法可以極大地減少時間複雜度,從而提高查詢速度,使演算法更加簡單。很多時候單看書上的內容會覺得很簡單,但是真正做起來又很容易忘東忘西,所以增加實際應用經驗很重要。

實現qq新帳戶申請和老帳戶登陸的簡化版功能。最大挑戰是:據說現在的qq號碼已經有10位數了。

main函式

在一棵樹t中兩個結點u和v的最近公共祖先(lca),是樹中以u和v為其後代的深度最大的那個結點。現給定某二叉搜尋樹(bst)中任意兩個結點,要求你找出它們的最近公共祖先。

lca函式

本題要求實現給定二叉搜尋樹的5種常用操作。

insert函式

delete函式

else //考慮如果找到這個位置,並且有左節點或者右節點或者沒有節點三種情況

else

}} return bst;

}find函式

else if(x大於bst->data)

return bst;

}findmin函式

return bst;

}findmax函式

完全二叉樹的定義是:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊。

因為右子樹的結點編號是父節點的兩倍,而左子樹的結點編號是父節點的兩倍加一,所以可以用陣列模擬建樹的過程。最後題目要求層序輸出,直接按編號大小輸出。而最後一行的結點編號和n相等。

本題定義了乙個陣列a來模擬建樹的過程使**變得更加簡單,這要求要掌握完全二叉樹的概念和性質,了解左子樹的結點編號和它父結點的結點編號的關係。在判斷是否為完全二叉樹時,他巧妙地利用結點數和i來判斷。當置陣列a的初值時他用到了memset函式,但我們自己在使用memset時要千萬小心,要知道在給char以外的陣列賦值時,只能初始化為0或者-1。

DS部落格作業07 查詢

1.思維導圖 2.談談你對查詢運算的認識及學習體會。學習了許多查詢的方法,比如 線性表中的順序查詢 折半查詢 分塊查詢。順序我們之前也接觸過,而折半查詢較為順序查詢的一種改進,這種改進使效率快了許多。樹錶類的查詢 二叉排序樹 平衡二叉樹 還有b 樹。其中難操作的是平衡二叉樹的失衡調整,ll和rr好做...

DS部落格作業07 查詢

本題要求實現函式,判斷給定二叉樹是否二叉搜尋樹。isbst函式傳入二叉樹t 定義bintree型變數 tleft tright ift為空且左右子樹皆為空 返回true end if 遍歷左子樹 tleft接受返回值 end if 遍歷右子樹 tright接受返回值 end if 返回 左子樹最右節...

DS部落格作業07 查詢

二叉排序樹難度比較大,首先是插入關鍵字的時候就必須注意,如果關鍵字插入就出現錯誤,那接下來對樹的操作就會錯誤。樹的另乙個難點是平衡二叉樹插入結點過程中的調整,雖然只有ll,rr,lr,rl四種調整,看課本也可以理解,但是當實際操作的時候還是難度比較大,必須先確定是插入的哪個結點導致了樹的不平衡,然後...