二叉樹的重要函式(二)

2021-08-02 22:57:13 字數 1454 閱讀 4847

1.二叉樹的節點個數

注意:返回乙個區域性變數供給外部函式使用,要是用static 將其定義為全域性變數放在堆區,迴圈一次加一,在遍歷左子樹,後右子樹,最後返回count。

2.樹的深度(以左右樹最大的深度為二叉樹的深度)

左子樹的高度(包括根節點 )是 high(t->leftchild)+1,右子樹的高度(包括根節點)是high(t->rightchild)+1。最後要返回二叉樹的深度,就比較左右樹的高度

3.判空

bool型別, 判斷根節點等不等於null

4.查詢乙個節點find

先給乙個介面函式,返回值為樹節點的指標型別,內部函式呼叫find()函式

首先判斷傳進來的根節點是否是空,為空,直接return null,否者走else分支,判斷t->data == key 是否相等,相等return t,不相等走else分支,利用遞迴定義乙個指向二叉樹節點型別的指標s = 先在左子樹樹中查詢,if(s != null )return s如果沒有查詢到才在右子樹中查詢 return find(t->rightchild);

5.查詢乙個樹的根節點

首先定義乙個介面位址,然後返回乙個樹節點型別的指標

先把根節點傳進來,判斷根節點是否為空,為空直接return null,不為空,呼叫find()函式,如果find()為null或者為根節點(根節點指的是最頂端的那個結點,它沒有父節點),則直接返回null,否則if(p == t->left || p == t->right ) 找到了就直接返回t,沒有找到,利用遞迴繼續找bintreenode s = parent(t->left,key),先在左子樹中找,如果左子樹沒有找到,再在右子樹中找

注意:find 和parent 函式中都有共同需要注意的地方就是,查詢的時候,首先要確保在左子樹中沒有找到,才在右子樹中查詢

由此可見遞迴雖然簡化了**,但是每次呼叫自己都要開闢新的空間,每次都會呼叫find函式,程式執行的效率也會大大下降。

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹 48 二叉樹 二叉樹的高度

目的 使用c 模板設計並逐步完善二叉樹的抽象資料型別 adt 內容 1 請參照鍊錶的adt模板,設計二叉樹並逐步完善的抽象資料型別。由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考教材 課件,以及網盤中的鍊錶...