二叉樹遍歷演算法的應用(c語言)

2021-09-26 14:23:37 字數 2152 閱讀 6195

思想:如果是空樹,遞迴結束

否則,申請新節點空間,複製根節點

遞迴複製左子樹

遞迴複製右子樹

int copy(bitree t,bitree &newt)

else

舉例:

1.剛開始指標t指向根節點a;

2.複製a的話就先在記憶體申請一塊空間用來存放newt;

3.下來就是複製a的左子樹b,b不為空;

4.將當前節點的值t所指向的就複製給newt, newt->data=t->data;

5.注意,這個指標是怎麼生成的呢,是在new bitnode復值給了newt了,newt=new bitnode,然後新節點的位址在呼叫的時候就返回了。

6.下面就是看b的左子樹,左子樹為空,結束返回,就繼續執行下一步去看他的右子樹

7.現在複製d節點,然後看他的左右子樹都為空,那麼對於以d為根節點的子樹就建立完成了,完成之後就返回到上一級,對於以b為根節點的子樹也建立完成,繼續返回上一級,對於以a為根節點的子樹左子樹建立完成,看他的右子樹c,複製完畢後就結束了,整個過程就是遞迴呼叫的,大體流程就是這樣。

如果是空樹,則深度為0

否則,遞迴計算左子樹的深度記為m,遞迴計算右子樹的深度記為n,二叉樹的深度則為m和n的較大者加1。

比如說下面這個圖:

要計算這個樹的深度的話先計算他的左子樹的深度為3,右子樹為3,完成之後還有加他的根節點的深度為1,

左子樹的深度怎麼計算呢

就他的左右子樹的深度然後比大小加一

這個樹的左子樹的深度是1,右子樹為2

看他的左子樹的深度是1,柚子樹的深度是0,所以以d為根節點的子樹深度是1+1=2;

以此類推。

思想:如果是空樹,則節點的個數為0,否則節點個數的左子樹的節點的個數+右子樹的節點的個數+1;

1.一開始當前節點指向跟節點,然後求他的左子樹

2.他的左子樹為

3.他的節點數怎麼算呢,就他的左右子樹

先是左子樹c,左子樹為空,指向到右子樹,右子樹也為空

這樣return 0+0+1,這樣的話b為根節點的子樹的左節點的個數為1

4,以此類推求b的右子樹為2,這樣以a為根節點的左子樹的個數為4,

5.下面就是以此類推的右子樹。。。。。 

思想:如果是空樹,則葉子節點的個數為0,否則為左子樹的葉子節點個數+右子樹的葉子節點的個數,因為是 葉子節點,所以不用加根節點這樣節點數1.

如果是葉子節點的話,說明左子樹和右子樹的節點都是空,有乙個不是空的話說明不是葉子節點

那麼他就是乙個樹

就繼續統計這個樹的左子樹的葉子節點和他的右子樹的葉子節點

然後判斷,知道找到葉子節點,在一層一層的,return0的話就結束這一層的遞迴呼叫,返回到上一層,以此類推。

二叉樹遍歷演算法的應用

今天開始複習資料結構,感覺基礎的東西一點還不會 遍歷 是二叉樹各種操作的基礎,通過遍歷操作可以把對節點的輸出延伸到對節點的判別,計數等操作,可以解決一些關於二叉樹其他實際問題,如果在遍歷過程生成節點,這樣就能建立二叉樹的儲存結構。於是就開始記錄書上的基本操作。1.先序遍歷建立二叉鍊錶 先序遍歷的訪問...

二叉樹的應用 二叉樹遍歷的應用

在以上討論的遍歷演算法中,訪問結點的資料域資訊,即操作visite bt data 具有更一般的意義,需根據具體問題,對bt 資料進行不同的操作。下面介紹幾個遍歷操作的典型應用。search bt,x 在bt 為二叉樹的根結點指標的二叉樹中查詢資料元素x。查詢成功時返回該結點的指標 查詢失敗時返回空...

二叉樹及其應用 二叉樹遍歷

給定二叉樹的廣義表表示,構造二叉樹並輸出二叉樹的四種遍歷順序。輸入說明 輸入僅一行,該行僅由 以及大小寫字元構成的二叉樹的廣義表表示,字串長度不超過100。輸出說明 在接下來的四行中依行輸出二叉樹的四種遍歷 輸入樣列 a b d,c e,f h 輸出樣列 abdcefh dbaecfh dbehfc...