【題目】
從上往下列印出二叉樹的每乙個結點,同一層的結點依照從左到右的順序列印。比如:
列印結果:8。6,10,5,7,9,11。
【分析】
二叉樹遍歷方式:前序。中序。後序,另一種廣度優先遍歷。在對圖遍歷時涉及到,而二叉樹能夠看作退化的圖,從樣例中能夠看出,列印順序是按層決定的,觀察發現,列印完根節點之後,然後列印其左右節點。再繼續列印左節點的左右孩子和右結點的左右孩子。由此能夠發現,假設將其結點的左右孩子放在乙個容器內,列印父節點後。再取其孩子依次列印,舉上述樣例進行說明:
1.列印8後。將6,10放在容器內。
2.列印6,將5,7放在容器內;
3.列印10。將9,11放入容器內;
4.列印5,5為葉子結點,沒有左右孩子,故列印容器內下乙個元素7,這樣依次列印出9,11。
由上述可觀察到。先進容器的先列印。先入先出的模式。而資料結構中佇列就是這樣的模式,所以這個容器採用佇列模式,可是和普通佇列略有不同,要注意到佇列的元素儲存的是乙個二叉樹結點。存在左右孩子成員,所以這裡最好用陣列佇列,當然。鍊錶佇列也是能夠,可是指標方面相對複雜一點。
由此,總結思路例如以下所看到的:
1、根節點進入佇列。
2、列印根節點。左右孩子進入佇列;
3、迴圈第二步,直至佇列中沒有元素進入了。
【測試**】
//從上往下列印二叉樹(層序遍歷,廣度優先遍歷)
#include
#include
using
namespace
std;
struct binarytreenode
;binarytreenode* createbinarytreenode(int value)
void connectbinarytreenode(binarytreenode* pparent, binarytreenode* pleftchild,
binarytreenode* prightchild)
void printtreefromtoptobottom(binarytreenode* proot)
}void test()
int main()
【輸出】
【程式說明】
1.對於本題來說,假設純用c來實現,將會耗費非常大工作量,而考慮到現有編譯器c和c++皆是相容的,所以,最好還是利用c++封裝庫的優勢,在c++庫中存在佇列。在這裡僅僅需加上
#include
但這裡須要注意,想要用c++庫一定要加
using namespace std;
queue
btnqueue;
初始化佇列,元素型別為binarytreenode*。佇列名btnqueue
btnqueue.push(proot)
將根節點壓入佇列
btnqueue.pop()
出佇列
btnqueue.empty()
佇列是否為空,能夠理解為空為1。非空為0
btnqueue.front()
佇列的頭
【參考文件】
從上往下列印二叉樹
從上往下列印二叉樹需要乙個雙端佇列,stl提供了deque容器符合我們的要求,和測試 如下 include include include using namespace std struct binarytreenode binarytreenode createbinarytreenode in...
從上往下列印二叉樹
題目描述 從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 用佇列儲存將要列印的節點,出佇列時,將左節點和右節點分別加入佇列當中,直到隊列為空,列印完畢。public arraylist integer printfromtoptobottom treenode root queue qu...
從上往下列印二叉樹
題目 從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。程式 include include include struct binarytreenode 函式名稱 createbinarytree 函式功能 通過二叉樹的先序序列建立二叉樹 輸入引數 proot 二叉樹的根節點 st...