• 力扣刷题第二十六天--二叉树


    前言

    昨天看总决赛,差距太大,看的没意思,真的是一点变通没有啊。难受,没有写题的状态了。大概率是最后一次看比赛了,青春已复过,白日忽相催。召唤师要和生活对线了。英雄们的语音,台词,技能历历在目,再多不舍,也要说再见。Legends never die!调整状态,再出发!再高的山,再长的河,也会越过!

    层序遍历的模板基本上就是这样,掌握好。

    内容

    一、二叉树的层序遍历

    102.二叉树的层序遍历

    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

    本题为后端高频面试题,被收录于《热招技术岗上岸指南》

    广度优先搜素

    层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上

    1. /**
    2. * Definition for a binary tree node.
    3. * type TreeNode struct {
    4. * Val int
    5. * Left *TreeNode
    6. * Right *TreeNode
    7. * }
    8. */
    9. //用切片模拟队列
    10. func levelOrder(root *TreeNode) [][]int {
    11. var res [][]int
    12. if root==nil{
    13. return res
    14. }
    15. curLevel:=[]*TreeNode{root}// 存放当前层节点
    16. for len(curLevel)>0{
    17. nextLevel:=[]*TreeNode{}// 准备通过当前层生成下一层
    18. vals:=[]int{}
    19. for _,node:=range curLevel{
    20. vals=append(vals,node.Val)// 收集当前层的值
    21. if node.Left!=nil{ // 收集下一层的节点
    22. nextLevel=append(nextLevel,node.Left)
    23. }
    24. if node.Right!=nil{
    25. nextLevel=append(nextLevel,node.Right)
    26. }
    27. }
    28. res=append(res,vals)
    29. curLevel=nextLevel// 将下一层变成当前层
    30. }
    31. return res
    32. }
    二、 二叉树的层序遍历II

    107.二叉树的层序遍历II

    给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

    广度优先搜素

    上一题反转一下结果集即可

    1. /**
    2. * Definition for a binary tree node.
    3. * type TreeNode struct {
    4. * Val int
    5. * Left *TreeNode
    6. * Right *TreeNode
    7. * }
    8. */
    9. func levelOrderBottom(root *TreeNode) [][]int {
    10. var res [][]int
    11. if root==nil{
    12. return res
    13. }
    14. curLevel:=[]*TreeNode{root}
    15. for len(curLevel)>0{
    16. nextLevel:=[]*TreeNode{}
    17. vals:=[]int{}
    18. for _,node:=range curLevel{
    19. vals=append(vals,node.Val)
    20. if node.Left!=nil{
    21. nextLevel=append(nextLevel,node.Left)
    22. }
    23. if node.Right!=nil{
    24. nextLevel=append(nextLevel,node.Right)
    25. }
    26. }
    27. res=append(res,vals)
    28. curLevel=nextLevel
    29. }
    30. n:=len(res)
    31. for i:=0;i2;i++{
    32. res[i],res[n-1-i]=res[n-1-i],res[i]
    33. }
    34. return res
    35. }

    最后

    为什么有的人总能保持高energy?你却总是消耗energy,导致没有精力做重要的事。内心充盈,精力充沛,才能吸引,影响别人!保护好自己的energy!!!

  • 相关阅读:
    腾讯后端一面:当 TCP 建立连接之后,TCP 和 UDP 的实时性是不是就差不多了?
    linux第一课:linux的“文化常识“
    .NET Core 允许跨域的两种方式实现(IIS 配置、C# 代码实现)
    结构体和联合体大小计算
    JAVA基础--MAVEN
    linux-内存
    C# Linq增强扩展MoreLinq之Aggregate(对序列应用累加器)
    【SpringCloud】微服务技术栈入门4 - RabbitMQ初探
    JVM Metaspace内存溢出问题
    ssm框架
  • 原文地址:https://blog.csdn.net/m0_62786673/article/details/134519461