二叉樹的層次遍歷

2021-08-03 00:08:45 字數 3259 閱讀 8335

二叉樹的層次遍歷需要用到佇列方面的知識,二叉樹之前已經講過一部分操作,這次主要講二叉樹的層次遍歷

用佇列實現層次遍歷的過程為:首先將根結點入隊,然後出隊,再將根結點的兩個子節點分別入隊(預設為先左後右)並判斷節點是否為空,為空不進行入隊,不為空入隊,然後繼續進行出隊操作,再將出隊元素的兩個節點入隊,只要佇列不為空就持續該操作。

上圖層次遍歷的結果應當為a b g c d h e f ,下面咱們來看操作

#ifndef _tree_h

#define _tree_h

#define elemtype char

typedef

struct bintreenode //二叉樹節點型別

bintreenode;

typedef

struct

//二叉樹根結點

bintree;

void initbintree(bintree *t); //初始化根結點

void createbintree(bintree* t,const

char* &p);

void createbintree(bintreenode* &t,const

char* &p);

void preorder(bintree* t); //前序遍歷

void preorder(bintreenode* t);

void inorder(bintree* t); //中序遍歷

void inorder(bintreenode* t);

void posorder(bintree* t); //後序遍歷

void posorder(bintreenode* t);

void levelorder(bintree* t); //層次遍歷

void levelorder(bintreenode* t);

#endif

#include

using

namespace

std;

#include

#include"tree.h"

#include"queue.h"

void initbintree(bintree *t) //初始化根結點

void createbintree(bintree* t) //建立二叉樹

void createbintree(bintreenode* &t)

else

}void preorder(bintree* t) //前序遍歷

void preorder(bintreenode* t)

}void inorder(bintree* t) //中序遍歷

void inorder(bintreenode* t)

}void posorder(bintree* t) //後序遍歷

void posorder(bintreenode* t)

}void levelorder(bintree* t) //層次遍歷

void levelorder(bintreenode* t)

cout

#define queue_h

#include"tree.h"

#define elemtypeb bintreenode* //巨集定義佇列儲存對像的型別

typedef

struct

queue

queue;

void init_queue(queue* q); //初始化佇列

void push(queue* q,elemtypeb x); // 入隊

void pop(queue* q); //出隊

int emptyqueue(queue* q); //判斷佇列是否為空,為空返回1,不為空返回0

elemtypeb getfront(queue* q); //獲取佇列隊頭元素

和咱們之前預期的結果一樣

再換一組測試資料abd##e##c#fg##h##

畫出對應樹形圖為

由樹形圖可以看出層次遍歷的結果應當為abcdefgh

我們來看執行結果

層次遍歷二叉樹

問題 假定根節點位於第0層 1.層次遍歷二叉樹 每層換行分開 2.層次遍歷二叉樹指定的某層 本文 例如 上圖中1.123 4567 82.第三層 78可以看出得出第二問的解,第一問迎刃而解了,所以從問題二下手 1.層次遍歷二叉樹指定的某層 可以得出這樣的乙個結論 遍歷二叉樹的第k層,相當於遍歷二叉樹...

二叉樹層次遍歷

題目描述 從上到下按層列印二叉樹,同一層結點從左至右輸出。每一層輸出一行。思路 二叉樹的層次遍歷,利用棧的先進後出的特性。struct treenode class solution res.push back temp while m.empty m中是從左往右入棧,這裡把它反過來,s中是從右往左...

二叉樹層次遍歷

層次遍歷二叉樹,每一次儲存在list中,結果按從葉子層到根,從左到右的順序儲存 一 class solution return lists 相當於在先序的基礎上改進,level是每個node所在的層次。如果lists大小和level相等,說明開始新一層的儲存。如果不等,則直接把值存入相應層次的lis...