題目:平衡二叉樹
題目描述:
給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。示例 1:
給定二叉樹[3,9,20,null,null,15,7]
3返回/ \9 20
/ \
15 7
true
。
分析:沒什麼可說的,雙遞迴,先判斷是否為空,再判斷節點是否平衡,節點平衡後,再判斷左節點和右節點,判斷平衡當然通過該節點的左右深度進行比較
上**:
/*** definition for a binary tree node.
* type treenode struct
*/func isbalanced(root *treenode) bool
if countfloor(root.left)-countfloor(root.right)>1 || countfloor(root.left)-countfloor(root.right) < -1elseelse
}return true
}func countfloor(root *treenode) int
max:=0
a:=countfloor(root.left)
b:=countfloor(root.right)
if a>belse
return 1+max
}題目:二叉樹的最小深度
題目描述:
給定乙個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明:葉子節點是指沒有子節點的節點。
示例:
給定二叉樹[3,9,20,null,null,15,7]
,
3返回它的最小深度 2./ \9 20
/ \
15 7
分析:也許有人會疑問,這很簡單啊,沒錯一開始我也覺得,馬上三行**解決,結果出現了錯誤
19 / 41個通過測試用例
狀態: 解答錯誤
輸入:[1,2]
輸出:1
預期:2
???為什麼輸出2呢,再看題目發現有乙個小玄機:最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。注意必須是葉子節點,所以這下就必須判斷下當前節點的狀態了;
不多說,上**自行感受:
/*** definition for a binary tree node.
* type treenode struct
*/func mindepth(root *treenode) int
min:=0
if root.left!=nil && root.right!=nilelse
}else if root.left!=nilelse if root.right!=nilelse
return min
}
每日程式設計(五) leetcode刷題
題目 最後乙個單詞的長度 描述 給定乙個僅包含大小寫字母和空格 的字串,返回其最後乙個單詞的長度。如果不存在最後乙個單詞,請返回 0 說明 乙個單詞是指由字母組成,但不包含任何空格的字串。示例 輸入 hello world 輸出 5分析 比較簡單了,很明顯字串的分割,去最後乙個字串,計算長度即可,但...
每日程式設計(十) leetcode刷題
題目 將有序陣列轉換為二叉搜尋樹 題目描述 將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示...
每日程式設計(十二) leetcode刷題
題目表述 給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1返回 true,因為存在目標和為 22 的根節點到葉子節點的路...