type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
//二叉树层序遍历
func levelOrder(root *TreeNode) [][]int {
res := [][]int{}
if root == nil {
return res
}
//用切片模拟队列存放当前层节点
curList := []*TreeNode{root}
for len(curList) > 0 {
//生成下一层
nextList := []*TreeNode{}
vals := []int{}
for _, v := range curList {
//收集当前层数值
vals = append(vals, v.Val)
if v.Left != nil {
nextList = append(nextList, v.Left)
}
if v.Right != nil {
nextList = append(nextList, v.Right)
}
}
res = append(res, vals)
//将下一层变成当前层
curList = nextList
}
return res
}
//二叉树翻转
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return root
}
//采用前序遍历 中左右
root.Left, root.Right = root.Right, root.Left //中
invertTree(root.Left) //左
invertTree(root.Right) //右
return root
}
//101. 对称二叉树
func compare(left, right *TreeNode) bool {
//左右节点分别有以下五种情况
if left != nil && right == nil {
return false
} else if left == nil && right == nil {
return true
} else if left == nil && right != nil {
return false
} else if left.Val != right.Val {
return false
}
//判断左子树的左孩子与右子树的右孩子是否对称
leftNode := compare(left.Left, right.Right)
//判断左子树的右孩子与右子树的左孩子是否对称
rightNode := compare(left.Right, right.Left)
return leftNode && rightNode
}
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
return compare(root.Left, root.Right)
}