代码随想录算法训练营Day18 | 102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树

85 阅读1分钟

LeetCode题目

102.二叉树的层序遍历

题目链接:Binary Tree Level Order Traversal - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
	res := [][]int{}
	if root == nil {
		return res
	}
	que := []*TreeNode{root}
	for len(que) > 0 {
		size := len(que)
		vec := []int{}
		for i := 0; i < size; i++ {
			node := que[0]
			que = que[1:]
			vec = append(vec, node.Val)
			if node.Left != nil {
				que = append(que, node.Left)
			}
			if node.Right != nil {
				que = append(que, node.Right)
			}
		}
		res = append(res, vec)
	}
	return res
}

226.翻转二叉树

题目链接:Invert Binary Tree - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func invertTree(root *TreeNode) *TreeNode {
	if root == nil {
		return nil
	}
	root.Left, root.Right = root.Right, root.Left
	invertTree(root.Left)
	invertTree(root.Right)
	return root
}

101.对称二叉树

题目链接:Symmetric Tree - LeetCode

代码如下:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func compare(left, right *TreeNode) bool {
	if left == nil && right != nil {
		return false
	} else if left != nil && right == nil {
		return false
	} else if left == nil && right == nil {
		return true
	} else if left.Val != right.Val {
		return false
	}
	outside := compare(left.Left, right.Right)
	inside := compare(left.Right, right.Left)
	return outside && inside
}

func isSymmetric(root *TreeNode) bool {
	if root == nil {
		return true
	}
	return compare(root.Left, root.Right)
}

总结

  1. [102.二叉树的层序遍历] 这份代码可以作为二叉树层序遍历的模板
  2. 这种层序遍历方式就是图论中的广度优先遍历,只不过这里应用在二叉树上