層序遍歷二叉樹

2021-08-04 02:45:36 字數 1256 閱讀 5601

演算法思想:

我們可以利用佇列先進先出的性質。層序遍歷即應該先列印根節點,從根節點開始分析,為了接下來能夠列印值為1的節點的兩個子節點,再遍歷到該節點時把其左右節點即2和5的兩個節點儲存在乙個

佇列中,現在

佇列中就有了兩個節點。按照從左到右的列印要求,取出節點值為2的節點,列印出值為2的節點之後把它的值為3和4的兩個節點放入

佇列。此時

佇列中就會有三個節點,值為5,3,4。接下來從佇列中取出值為5的節點。如此依次進行。

層序列印

操作 佇列

1 列印節點1

節點2、節點5 2

列印節點2

節點5、節點3、節點4 3

列印節點5

節點3、節點4、節點6 4

列印節點3

節點4、節點6 5

列印節點4

節點6 6

列印節點6

可以看出:每次列印乙個節點的時候,如果該節點有子節點,則把該節點的子節點放到乙個佇列的末尾。接下來到佇列的頭部取出最早進入佇列的節點,重複前面的列印操作,直到佇列中的所有節點度被列印出來。

**實現:

#include 

#include

using namespace std;

template

struct binarytreenode

}; template

class binarytree ~binarytree() void destroy(node* root) binarytree(t* a, size_t n, const t& invalid) void levelorder() //利用佇列實現 cout << endl; } protected: node* _createtree(t* a, size_t n, const t& invalid, size_t& index) return root; } protected: node* _root; }; void test() ; binarytree

s(a, sizeof(a) / sizeof(a[0]), '#'); s.levelorder(); }

測試結果:

二叉樹層序遍歷 求二叉樹的層序遍歷

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 3 9,20 15,7 示例1 輸入 返回值 1 2 示例2輸入 返回值 1 2,3 4,5 解題思路 重點是如何把在一層的節點放到一起,設定乙個引數專門放一層的節點 class t...

層序遍歷二叉樹

要求 設計乙個演算法層序遍歷二叉樹 同一層從左到右訪問 我寫了乙個演算法 用乙個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。status hierarchybitree bitree t,status visit telemtype e destroyqueue q 釋放佇列空間 return...

二叉樹層序遍歷

主要流程 確定root非空 根指標進佇列 佇列非空就一直迴圈 依次掃瞄目前佇列中所有元素 新增的不算 從佇列取出第一元素 將值放入結果vector中 判斷左右子節點非空,並依次入隊 將本次結果放入二維陣列中 如果需要按層逆序輸出的話,在這裡將二維結果倒排一下 返回二維結果 vector levelo...