LeetCode题目
104.二叉树的最大深度
题目链接:Maximum Depth of Binary Tree - LeetCode
代码如下:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}
depth := 0
que := []*TreeNode{root}
for len(que) > 0 {
size := len(que)
depth++
for i := 0; i < size; i++ {
node := que[0]
que = que[1:]
if node.Left != nil {
que = append(que, node.Left)
}
if node.Right != nil {
que = append(que, node.Right)
}
}
}
return depth
}
111.二叉树的最小深度
题目链接:Minimum Depth of Binary Tree - LeetCode
代码如下:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minDepth(root *TreeNode) int {
if root == nil {
return 0
}
depth := 0
que := []*TreeNode{root}
for len(que) > 0 {
size := len(que)
depth++
for i := 0; i < size; i++ {
node := que[0]
que = que[1:]
if node.Left != nil {
que = append(que, node.Left)
}
if node.Right != nil {
que = append(que, node.Right)
}
if node.Left == nil && node.Right == nil {
return depth
}
}
}
return depth
}
222.完全二叉树的节点个数
题目链接:Count Complete Tree Nodes - LeetCode
代码如下:
// func countNodes(root *TreeNode) int {
// if root == nil {
// return 0
// }
// return 1 + countNodes(root.Left) + countNodes(root.Right)
// }
func countNodes(root *TreeNode) int {
if root == nil {
return 0
}
left, right := root.Left, root.Right
leftDepth, rightDepth := 0, 0
for left != nil {
left = left.Left
leftDepth++
}
for right != nil {
right = right.Right
rightDepth++
}
if leftDepth == rightDepth {
return (2 << leftDepth) - 1
}
return countNodes(root.Left) + countNodes(root.Right) + 1
}