剑指 Offer 32 - I. 从上到下打印二叉树
// 先掌握层序遍历。后期在整理多解法
// 把树的值全放在一个数组
func levelOrder(root *TreeNode) []int {
if root == nil {
return nil
}
ans := make([]int,0)
queue := list.New()
queue.PushBack(root)
for queue.Len() != 0 {
layerN := queue.Len()
for i:=0;i<layerN;i++{
node := queue.Remove(queue.Front()).(*TreeNode)
ans = append(ans, node.Val)
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
}
return ans
}
剑指 Offer 32 - II. 从上到下打印二叉树 II
// 先掌握层序遍历模板。后面再多解法。
// 把树层的值放在一个数组,所有层放在一个总数组
func levelOrder(root *TreeNode) [][]int {
ans := make([][]int,0)
if root == nil {
return ans
}
queue := list.New()
queue.PushBack(root)
for queue.Len() != 0 {
n := queue.Len()
temp := make([]int,0)
for i:=0;i<n;i++{
node := queue.Remove(queue.Front()).(*TreeNode)
temp = append(temp, node.Val)
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
ans = append(ans, temp)
}
return ans
}
剑指 Offer 32 - III. 从上到下打印二叉树 III
var temp []int // 注意放在全局
func levelOrder(root *TreeNode) [][]int {
ans := make([][]int,0)
if root == nil {
return ans
}
temp = []int{}
queue := list.New()
queue.PushBack(root)
num := 0
for queue.Len() != 0 {
num++ // 标记奇偶行
n := queue.Len()
for i:=0;i<n;i++{
node := queue.Remove(queue.Front()).(*TreeNode)
temp = append(temp, node.Val)
if node.Left != nil {
queue.PushBack(node.Left)
}
if node.Right != nil {
queue.PushBack(node.Right)
}
}
if num % 2 == 0 { // 根据奇偶行反转一下数组
for i:=0;i<len(temp)/2;i++{
temp[i],temp[len(temp)-1-i] = temp[len(temp)-1-i], temp[i]
}
}
ans = append(ans, temp)
temp = []int{}
}
return ans
}