代码随想录算法训练营Day19 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

57 阅读1分钟

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
}