演算法思想:
我們可以利用佇列先進先出的性質。層序遍歷即應該先列印根節點,從根節點開始分析,為了接下來能夠列印值為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...