商品分類標準網(wǎng)站網(wǎng)頁的優(yōu)化方法
1、 110.平衡二叉樹
題目:
給定一個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
一個二叉樹每個節(jié)點 的左右兩個子樹的高度差的絕對值不超過 1 。
思路:
- 經(jīng)典后序遍歷,感覺所有的后序遍歷的二叉樹都一樣了
- 因為要返回高度,所以新建一個dfs
- go 沒有abs函數(shù)?
func isBalanced(root *TreeNode) bool {return hou(root) != -1
}
func hou(node *TreeNode) int {if node == nil {return 0}leftHigh := hou(node.Left)if leftHigh == -1 {return -1}rightHigh := hou(node.Right)if rightHigh == -1 {return -1}if leftHigh-rightHigh > 1 || rightHigh-leftHigh > 1 {return -1}return 1+max(leftHigh, rightHigh)
}
func max(a,b int) int {if a>b {return a}; return b}
2、257. 二叉樹的所有路徑
題目:
給你一個二叉樹的根節(jié)點 root ,按 任意順序 ,返回所有從根節(jié)點到葉子節(jié)點的路徑。
葉子節(jié)點 是指沒有子節(jié)點的節(jié)點。
思路:
- 葉子節(jié)點特性,就是判斷條件,就是左右為空
- 條件判斷
- 注意 res 的聲明與初始化
var res []string
func binaryTreePaths(root *TreeNode) []string {res = []string{}path(root, "")return res
}
func path(node *TreeNode, list string) {if node == nil {return }list += strconv.Itoa(node.Val)// 想清楚邏輯if node.Left == nil && node.Right == nil {res = append(res, list)} else {list += "->"path(node.Left, list)path(node.Right, list)}
}
3、404. 左葉子之和
題目:
給定二叉樹的根節(jié)點 root ,返回所有左葉子之和。
思路:
- 后序,左右中
- 重點就是判斷規(guī)則
- 規(guī)則就是左節(jié)點之后處理一下是否拿這個節(jié)點的值!!!
func sumOfLeftLeaves(root *TreeNode) int {if root == nil {return 0}if root.Left == nil && root.Right == nil {return 0}// 葉子節(jié)點leftNumber := sumOfLeftLeaves(root.Left)if root.Left != nil && root.Left.Left==nil && root.Left.Right==nil {leftNumber = root.Left.Val}rightNumber := sumOfLeftLeaves(root.Right) // right就算是葉子節(jié)點,也不需要返回值// 這個條件怎么搞?return leftNumber+rightNumber
}