第六章 二叉树 part02

二叉树层序遍历登场!

    1. 二叉树的层序遍历
go 复制代码
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 var q []*TreeNode
var head int
var tail int

func init() {
	q = make([]*TreeNode, 10010)
	head = -1
	tail = -1
}
func empty() bool {
	return head == tail
}
func push(x *TreeNode) {
	tail++
	q[tail] = x
}
func pop() *TreeNode {
	head++
	return q[head]
}
func size() int {
	return tail - head
}
func levelOrder(root *TreeNode) [][]int {
	var res [][]int
	
	push(root)
	for !empty() {
		qSize := size() // 细节
		var temp []int
		for i := 0; i < qSize; i++ {
			node := pop()
			if node == nil {
				continue
			}
			// watch
			temp = append(temp, node.Val)
			push(node.Left)
			push(node.Right)
		}
		if len(temp) > 0 {
			res = append(res, temp)
		}
	}
	return res
}

把结果数组reverse一下就是从底开始倒序

    1. 二叉树的层序遍历 II
go 复制代码
	slices.Reverse(res)
	return res

226.翻转二叉树

go 复制代码
func invertTree(root *TreeNode) *TreeNode {
    if root == nil {
        return nil
    }
    left := invertTree(root.Left)
    right :=invertTree(root.Right)
    root.Left = right
    root.Right = left
    return root
}

101. 对称二叉树

  • 后序遍历,但是一边要反后序遍历(一个左右,一个右左)
go 复制代码
func check (left, right *TreeNode) bool{
    if left == nil && right == nil {
        return true
    } 
    if (left == nil && right != nil) || (left != nil && right == nil) {
        return false
    }
    if left.Val != right.Val {
        return false
    }
    return check(left.Left, right.Right) && check(left.Right, right.Left)
 }
func isSymmetric(root *TreeNode) bool {
    return check(root.Left, root.Right)
}
相关推荐
阿群今天学习了吗2 小时前
“鱼书”深度学习进阶笔记(3)第四章
人工智能·笔记·python·深度学习·算法
IT猿手2 小时前
2025年最新原创多目标算法:多目标酶作用优化算法(MOEAO)求解MaF1-MaF15及工程应用---盘式制动器设计,提供完整MATLAB代码
算法·数学建模·matlab·多目标优化算法·多目标算法
数据智能老司机5 小时前
图算法趣味学——最大流算法
数据结构·算法·云计算
秋难降6 小时前
【数据结构与算法】———深度优先:“死磕 + 回头” 的艺术
数据结构·python·算法
数据智能老司机6 小时前
图算法趣味学——图着色
数据结构·算法·云计算
数据智能老司机6 小时前
图算法趣味学——启发式引导搜索
数据结构·算法·云计算
John.Lewis6 小时前
数据结构初阶(8)二叉树的顺序结构 && 堆
c语言·数据结构·算法
SimonSkywalke7 小时前
基于知识图谱增强的RAG系统阅读笔记(七)GraphRAG实现(基于小说诛仙)(一)
算法
再睡一夏就好7 小时前
【排序算法】④堆排序
c语言·数据结构·c++·笔记·算法·排序算法
再睡一夏就好7 小时前
【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法
c语言·数据结构·经验分享·学习·算法·排序算法·学习笔记