二叉樹的遍歷問題,二叉樹的遍歷問題?

時間 2022-09-16 18:30:03

1樓:夙凡顧堯

程式vs2003成功編譯執行

#include

"stdafx.h"

#include

using

namespace

std;

typedef

struct

tree

bintree;

//二叉樹的建立

bintree

*create(char*

str,

intpose,

intsize)

return(t);

}void

printtree(bintree

*t,int

layer)

void

visitt(char

e)//先序遍歷

void

preorder(bintree

*root,

void(*vi)(char))

}//層次遍歷

void

levelorder(bintree

*root,

void(*vi)(char))

//若源結點有左孩子,則該左孩子入隊,尾指標後移一位//if(null!=head->rchild)//若源結點有右孩子,則該右孩子入隊,尾指標後移一位//head=head->next;

//依次訪問完源結點的左右孩子後,頭指標後移一個,進入下次迴圈//}while(t!=null)

}//主函式

void

main()

2樓:清風or朗月

這是前序遍歷二叉樹額度遞迴演算法,遞迴呼叫你不知道?

這是c語言中一個比較難理解,很好用的方法,但是用的時候要小心,因為當你呼叫的層數比較深時,會出現記憶體不夠(堆疊裝不下)。簡單來說,遞迴呼叫就是,在遇到自己呼叫自己的函式時,就轉到這個函式的函式頭去,就「好像」是重新開始執行。

至於status(*visit)(elemtype)是指向返回值是status型別的函式指標,這個函式的引數時elemtype型別的

3樓:愈君己琲瓃

/*前序遍歷

*/void

preorder(struct

btreenode

*bt)

return;

}這個演算法是用遞迴方法前序遍歷二叉樹,可以用同樣的方法中根遍歷,和後根遍歷!

4樓:綦慕度代柔

gdbfkca,可以根據前序判斷a為根節點,中序判斷dgb在a左邊,其他在右邊再畫圖就可以了

二叉樹的建立,二叉樹的遍歷。

關於二叉樹遍歷的問題

5樓:

1-----e

-------/--\

2 d------- b

-------------\

3--------------c

----------------/

4-------------a

1-------a

--------/--\

2-----b ---c

------/----/--\

3---d ---f----k

------\

4-----g

6樓:

前序概念是:tlr(根左右)先訪問根,再訪問左 "子樹",再訪問右 "子樹".訪問左 "子樹"也是按照這樣的原則在左"子樹"中前序的訪問.

這樣的過程叫遞迴.

中序概念是:ltr(左根右)

後序概是:lrt(左右根).類似是很好理解的.

11)由後序序列,知根在最後,所以,e是根

2)由e為根,中序序列,知道左"子樹"是d(在左邊),右"子樹"是bac.(在右邊)

3)右"子樹"bac中,由後序序列知,b為根,所以ac為根b的右"子樹".(在右邊)

4)在右"子樹"ac中,由後序序列知,c為根,a為其左子樹(在左邊啊)

樹很容易就畫出來了(你自己畫吧,我怎麼畫啊呵呵).然後,對它進行前序遍歷.

得到的前序序列是:edbca

2一樣的道理,由前序序列,知道a是根,由中序序列知道,根a左子樹和右子樹,然後在子樹中,按照上面方法推.

這裡就不詳細說了.

會做出1,自然會做2.

我已經說的很清楚了,再不明白,那你就笨的可以.

二叉樹遍歷

7樓:雨曄

很顯然你還不懂的遍歷一棵二叉樹的原理

當你拿到一棵二叉樹,無論它的形狀如何的千奇百怪我們都可以將它按照如下的方式劃分

根/ \

左子樹 右子樹

一棵有很多個節點的二叉樹可以劃分為以上的形式也可以這麼理解,只要是按以上形式組合的都可以稱為是二叉樹一個僅僅只有根節點的二叉樹也可以劃分成以上的形式,只不過他的左右子樹都為空罷了

所以,我們發現,二叉樹的定義其實是一個遞迴定義的過程大的二叉樹是由小的二叉樹構建而成的

所以,當我們考慮要遍歷一棵二叉樹時

也是首選遞迴的遍歷

遍歷二叉樹

它的基本思想是先按照上面的形式把整棵二叉樹劃分為3部分哪麼接下來的工作就很簡單了

我們只需要將這3部分都遍歷一遍就可以了(這裡用到了分而治之的思想)而對於這3部分來說

根節點的遍歷無疑是最方便的,直接訪問就ok了而對於左右子樹呢?

我們不難發現,左右子樹其實分別成為了兩棵完整的樹他們擁有各自獨立的根節點,左子樹和右子樹

對他們的遍歷,很顯然應該與剛才的遍歷方法一致便可(如果上面的都理解了,那麼這個題就是小菜一碟了,如果覺得無法理解,可以按照下面的方法自己多分解幾棵樹)

對於這個題目,中序遍歷這可二叉樹

先看根節點

1/ \

左子樹 右子樹

我們應該先遍歷左子樹

也就是下面這棵樹

2/ \

4 5

對於這棵樹在進行中序遍歷

我們應先遍歷她的左子樹

他只有一個根節點4,左右子樹都為空

哪麼遍歷這個只有一個根節點的二叉樹

先訪問她的左子樹,為空

返回訪問該樹的根節點4

在訪問右子樹也為空

此時,這棵樹已經被完全的遍歷了

我們需要返回上一層也就是

2/ \

4 5

這棵樹此時,她的左子樹已經被訪問完畢

根據中序遍歷的規則

需要訪問此樹的根節點2

此時的訪問順序是4-2

訪問了根節點

在訪問右子樹只有一個根節點的5(具體過程看4的訪問)5訪問完畢

也就意味著

2/ \

4 5

這棵樹已經訪問完了

需要返回上一層

也就是1為根的樹

此時這棵樹的左子樹已經訪問完畢

此時訪問的順序是4-2-5應該沒有問題

接下來訪問根節點1

在訪問右子樹

3/ \

4 7

是不是覺得似曾相識???

她的訪問應該跟

2/ \

4 5

一致哪麼最終遍歷的順序也出來了

4-2-5-1-6-3-7

-----------------------------花了10多分鐘

希望對你有所幫助

順便自己也複習下呵呵

8樓:

中序:先遍歷左子樹 就是245組成的那棵樹 遍歷245時也是中序 就是「425」

然後走根節點「1」 然後遍歷右子樹「637」

連起來就是4251637~~

9樓:匿名使用者

- -!這種問題。。多看幾遍書就好了吧

中序是左中右順序遍歷。把每個點都看成頭結點然後左走,遇節點就遍歷左子樹,等左邊空了,就訪問當前節點的父節點,也就是中,寫下,再右,以對右節點左中右。。

整個過程就是把左中右做從大到小的分離。自己多數數就清楚了

資料結構二叉樹的遍歷問題

資料結構二叉樹的遍歷,C語言資料結構 二叉樹的遍歷

前序 根,左兒子,右兒子 中序 左兒子,根,右兒子 後序 左兒子,右兒子,根 首先是要牢記一上幾句話 比如這棵樹的中許遍歷,a有左兒子,先不訪問a,以此類推,直到d沒有左兒子,訪問d,然後訪問d的根b,然後應該訪問b的右兒子,但是b沒有,所以訪問b的根a,訪問完a以後訪問a的右子樹。先看c,c有左兒...

設有如下圖所示的二叉樹,對此二叉樹前序遍歷的結果為()

b,前序就是先看根節點,再看左子樹,再看右子樹 b你可以加我賬戶名,我是學計算機的。設一棵二叉樹的中序遍歷結果為dbeafc,前序遍歷的結果為abdecf,則後序遍歷結果為 依據前序抄 遍歷序列可確定襲根結點為a 再依據中序遍歷序列可知其左子樹由dbe構成,右子樹為fc 又由左子樹的前序遍歷序列可知...

noip初賽大牛請進 二叉樹的遍歷

洛恩 a b c d e f g 前序 a bde cfg 後序 deb fgc a 中序 dbe a fcg 前 中 後是對根來說 總根,還有每個子樹的根,你我幫你空出來了,自己多研究研究。這是我寫的一個根據中序和後序求前序的程式,給你參考。var st2,st3 string procedure...