面試題 二叉樹的層序遍歷以及變種題目

2021-10-09 20:16:46 字數 1799 閱讀 8557

//      0

// 2 1

// 3

// 4

//二叉樹的層序遍歷

//用乙個佇列,先將根節點放入

// 佇列不空的時候就將第乙個節點輸出列印,這個節點的左子樹不空時,將左節點入隊,右子樹不空時就將右節點入隊

private

static arraylist

help

(treenode root)

q.offer

(root)

;while

(q.isempty()

!=true)if

(temp.right != null)

}return res;

}

output:

//二叉樹的層序遍歷,每層分別放在list中輸出

//將根節點放入佇列中,佇列不空的時候,計算佇列的大小,for迴圈中彈出佇列首的元素,如果他的左子樹不空就壓入左子節點,如果右子樹不空就壓入右子節點

//for迴圈佇列的size次,將本層節點都存入list

private

static arraylist

>

levelorderhelp

(treenode root)

q.offer

(root)

;while

(q.isempty()

!=true)if

(temp.right != null)

} res.

add(l);}

return res;

}

output:

與二相同,只是輸出時倒序輸出

如上圖所示,從右邊看上去的輸出應該是:0 1 3 4

原理:層序遍歷二叉樹,將每一層的最後乙個元素輸出即為結果

private

static arraylist

seerightanlgle

(treenode root)

q.offer

(root)

;while

(q.isempty()

!=true)if

(temp.right != null)

//找到每一層的最後乙個節點輸出

if(i == count -1)

}}return res;

}

output:

那同理,如果要輸出從左邊看上去的值,輸出每一層的第乙個節點即可。

private

static arraylist

>

zhiprint

(treenode root)

q.offer

(root)

;int depth =0;

//用來判斷層數,計算是奇數還是偶數

while

(!q.

isempty()

)}else

}while

(cur < count)

if(temp.right != null)

cur++;}

res.

add(l);}

return res;

}

output:

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

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