第六章 二叉树 part02

二叉树层序遍历登场!

    1. 二叉树的层序遍历

/**
 * 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
	slices.Reverse(res)
	return res

226.翻转二叉树


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. 对称二叉树

  • 后序遍历,但是一边要反后序遍历(一个左右,一个右左)
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)
}

相关推荐

  1. part02

    2024-04-21 14:02:01       42 阅读
  2. day 20 part06

    2024-04-21 14:02:01       32 阅读
  3. 代码随想录天: part03

    2024-04-21 14:02:01       38 阅读
  4. part02 算法

    2024-04-21 14:02:01       51 阅读
  5. Day14- part03

    2024-04-21 14:02:01       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 14:02:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 14:02:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 14:02:01       87 阅读
  4. Python语言-面向对象

    2024-04-21 14:02:01       96 阅读

热门阅读

  1. IoTDB数据库整合MyBatis实现SpringBoot项目CRUD

    2024-04-21 14:02:01       34 阅读
  2. python笔记之面向对象

    2024-04-21 14:02:01       39 阅读
  3. docker-compose搭建MongoDB

    2024-04-21 14:02:01       33 阅读
  4. 【QT进阶】Qt http编程之http与https简单介绍

    2024-04-21 14:02:01       43 阅读
  5. Gitea:轻量级全功能DevSecOps平台的深度解析

    2024-04-21 14:02:01       34 阅读
  6. IDM的实用功能及其在现代下载管理中的重要地位

    2024-04-21 14:02:01       41 阅读
  7. Postgresql float8类型精度丢失问题

    2024-04-21 14:02:01       38 阅读
  8. 通过docker在容器中通过Gunicorn运行flask

    2024-04-21 14:02:01       31 阅读
  9. Fastadmin解决异步高并发大并发阻塞超时问题

    2024-04-21 14:02:01       40 阅读
  10. XiaodiSec day034 Learn Note 小迪渗透学习笔记

    2024-04-21 14:02:01       32 阅读
  11. Android 应用更新提醒自动跳转安装

    2024-04-21 14:02:01       39 阅读
  12. Rust为什么这么难学?

    2024-04-21 14:02:01       75 阅读