給定乙個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)要麼廣度優先搜尋要麼treewalk,感覺treewwalk實現起來簡單一點:例如: 給定二叉樹 [3,9,20,null,null,15,7],
返回其自底向上的層次遍歷為:3
/ \
9 20
/ \
15 7
[ [15,7], [9,20], [3] ]
class
solution
ans.
get(level)
.add
(node.val)
;treewalk
(node.left, ans, level +1)
;treewalk
(node.right, ans, level +1)
;}public list
>
levelorderbottom
(treenode root)
}
缺點可能是最後需要reverse一遍,以及在前進過程中需要記錄當前是第幾層。
也可以用深度或者廣度優先。深度優先搜尋實現起來的感覺應該跟treewalk差不多,不實現了,實現了一下廣度優先搜尋,仍然採用記錄當前層級最後反轉的思路:
class
solution
ans.
get(level)
.add
(node.val)
; nodequeue.
add(node.left)
; nodequeue.
add(node.right)
; levelqueue.
add(level +1)
; levelqueue.
add(level +1)
;}collections.
reverse
(ans)
;return ans;
}}
看了一下題解,是可以逐層處理的,那樣就不需要記錄層級和最後反轉了:
class
solution
ans.
add(
0, cur);}
return ans;
}}
優秀啊題解 每日一題 重建二叉樹
題目 輸入某二叉樹的先序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的先序遍歷和中序遍歷的結果中都不含重複的數字。例如 前序遍歷序列 1,2,4,7,3,5,6,8 和中序遍歷序列 4,7,2,1,5,3,8,6 重建出下圖所示的二叉樹並輸出它的頭結點。param preorder 先序遍歷 p...
每日一題 平衡二叉樹
題目描述 給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。本題中,一棵高度平衡二叉樹定義為 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1 示例1 輸入 root 3,9,20,null,null,15,7 輸出 true 示例2 輸入 root 1,2,2,3,3,null,null,...
每日一題 34 二叉樹的層平均值
給定乙個非空二叉樹,返回乙個由每層節點平均值組成的陣列.示例 1 輸入 3 9 20 15 7 輸出 3,14.5,11 解釋 第0層的平均值是 3,第1層是 14.5,第2層是 11.因此返回 3,14.5,11 注意 節點值的範圍在32位有符號整數範圍內。解答 definition for a ...