資料結構 二叉樹的層序遍歷

2021-08-29 20:31:46 字數 1408 閱讀 4566

問題:給定乙個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:給定二叉樹:[3,9,20,null,null,15,7],

3

/ \9 20

/ \

15 7

返回其層次遍歷結果:

[

[3],

[9,20],

[15,7]

]

思路分析:

這道題的要求是返回遍歷結果放在乙個二維陣列裡面,所以我們可以開闢三個陣列,第乙個陣列裡面一開始放入第一層資料,放完之後,出資料時,出乙個資料,就把該資料的左右子樹帶到第二個陣列裡面,當第一層資料出完時,再把第二個陣列裡面的資料放入第乙個陣列,重複以上操作,直至兩個陣列都為空時,遍歷結束。

具體實現**如下(因為該**是直接在oj上面寫的,所以沒有測試部分的**):

/**

* definition for a binary tree node.

* struct treenode ;

*//**

* return an array of arrays of size *returnsize.

* the sizes of the arrays are returned as *columnsizes array.

* note: both returned array and *columnsizes array must be malloced, assume caller calls free().

*/int maxdepth(struct treenode* root)

int** levelorder(struct treenode* root, int** columnsizes, int* returnsize)

int level=0;//第0層

while(levelval;

}(*columnsizes)[level]=a1size;

int k=0;

for(int j=0;jleft)

a2[k++]=a1[j]->left;

if(a1[j]->right)

a2[k++]=a1[j]->right;

}a2size=k;

struct treenode** a=a1;

a1=a2;

a2=a;

a1size=a2size;

a2size=0;

level++;

}return levelarray;

}

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

給定乙個二叉樹,返回該二叉樹層序遍歷的結果,從左到右,一層一層地遍歷 例如 給定的二叉樹是,該二叉樹層序遍歷的結果是 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...