二叉樹的層次遍歷

2021-08-28 17:07:06 字數 993 閱讀 4192

要進行層次遍歷,需要建立乙個迴圈佇列。先將二叉樹頭結點入佇列,然後出佇列,訪問該結點,如果它有左子樹,則將左子樹的根結點入隊;如果它有右子樹,則將右子樹的根結點入隊。然後出隊,對出隊結點訪問,如此反覆,直到隊列為空為止。

層次遍歷函式如下:

/*

樹的層次遍歷。

需要建立乙個佇列,直到隊列為空為止。

*/void level(btnode *p)

if(q->rchild!=null)

}}}

包括構造二叉樹過程,完整的測試**如下:

#includeusing namespace std;

int const maxsize=20;

typedef char elemtype;

typedef struct btnode

btnode;

/*插入資料元素,使二叉樹成為一顆二叉搜尋樹。

規定左子樹(資料域)小於右子樹(資料域)。

*/btnode* insert(btnode *p,elemtype data)

else

else

}return p;}/*

初始化二叉樹。

對樹結構進行修改,第乙個引數必須使用引用(&),

否則,應當返回修改後的樹根節點,如圖insert()函式的操作。

*/void init(btnode *&p,elemtype a,int n)}/*

樹的層次遍歷。

需要建立乙個佇列,直到隊列為空為止。

*/void level(btnode *p)

if(q->rchild!=null)

} }}

int main()

; init(t,e,sizeof(e)/sizeof(e[0]));

preorder(t);

cout

return 0;

}

層次遍歷二叉樹

問題 假定根節點位於第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...