如何理解二叉树的层次遍历
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇文章给大家分享的是有关如何理解二叉树的层次遍历,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。算法:树的层次遍历是树的基本操作之一,包
千家信息网最后更新 2025年12月04日如何理解二叉树的层次遍历
本篇文章给大家分享的是有关如何理解二叉树的层次遍历,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
算法:
树的层次遍历是树的基本操作之一,包括二叉树的层次遍历,多叉树的层次遍历,以及二叉树层次遍历的变形题目,层次遍历+每一层的节点的翻转等操作。
对于这类题目,典型算法就是先将树按照层次存入数组当中,然后统一对每一层的数据进行数据处理。
题目1:
102. 二叉树的层序遍历
代码实现:
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*//*方法1:非递归操作*//*func levelOrder(root *TreeNode) [][]int {if root == nil {return nil}var stack []*TreeNodevar result [][]intstack = append(stack,root)for {if len(stack) == 0 {break;}res,stack1 := helper(stack)if len(res) != 0 {result = append(result,res)}stack = stack1}return result}func helper(stack []*TreeNode)(res []int, stackRes []*TreeNode){if len(stack) == 0{return}for i:=0;inode := stack[i]if node == nil {continue}res = append(res,node.Val)stackRes = append(stackRes,node.Left)stackRes = append(stackRes,node.Right)}return}*//*解法:队列来操作,树的层次遍历,从左到右遍历树的每一层存入对应的数组即可*//*方法2:递归操作利用二叉树的先序遍历方法,也就是先访问根节点,在访问做左孩子,然后访问右孩子。*/func levelOrder(root *TreeNode) [][]int {return preOrder(root, 0, [][]int{})}func preOrder(root *TreeNode, level int, res [][]int) [][]int {if root == nil {return res}// 1.根节点的处理// 这里因为level从0开始计算的缘故,len放进去值之后就是1,所以==的时候,便是是新的一层开始if level == len(res) {res = append(res,[]int{root.Val})} else {res[level] = append(res[level],root.Val)}// 2.左孩子节点的处理res = preOrder(root.Left,level+1,res)// 3.右孩子节点的处理res = preOrder(root.Right,level+1,res)return res}
执行结果:
题目2:
https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
代码实现:
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/func levelOrderBottom(root *TreeNode) [][]int {r := [][]int{}order(root,0,&r)for i,j:= 0, len(r)-1;ir[i],r[j] = r[j],r[i]i++j--}return r}func order(root *TreeNode,level int,res *[][]int) {if root == nil {return}if len(*res)-1 < level {*res = append(*res,[]int{root.Val})} else {(*res)[level] = append((*res)[level],root.Val)}order(root.Left,level+1,res)order(root.Right,level+1,res)return}
执行结果:
题目3:
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
代码实现:
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/func zigzagLevelOrder(root *TreeNode) [][]int {if root == nil {return nil}res := [][]int{}levelOrder(root,0, &res)for i:=0; i< len(res); i++ {if i%2 == 1{j,k:=0,len(res[i])-1for j < k{res[i][j],res[i][k] = res[i][k],res[i][j]j++k--}}}return res}func levelOrder(root *TreeNode, l int, res *[][]int) {if root == nil {return}if len(*res)-1 < l {*res = append(*res,[]int{root.Val})} else {(*res)[l] = append((*res)[l],root.Val)}levelOrder(root.Left,l+1,res)levelOrder(root.Right,l+1,res)return}// 需要: 先按照层次去遍历存储,然后统一的做整理,调整需要转换的对应层次
结果输出:
题目4.
https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal/
代码实现:
/*** Definition for a Node.* type Node struct {* Val int* Children []*Node* }*/func levelOrder(root *Node) [][]int {if root == nil {return nil}res := [][]int{}levelOrderOk(root,0,&res)return res}func levelOrderOk(root *Node,l int, res *[][]int){if len(*res)-1 < l {*res = append(*res,[]int{root.Val})} else {(*res)[l] = append((*res)[l],root.Val)}for _,t := range root.Children {levelOrderOk(t,l+1,res)}return}
执行结果:
以上就是如何理解二叉树的层次遍历,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
层次
题目
节点
代码
孩子
结果
处理
就是
方法
数据
数组
更多
知识
算法
篇文章
递归
实用
也就是
典型
基本操作
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
购物软件开发成本
2020年剑侠世界2服务器列表
主流数据库技术的基本原理
河北正规网络技术市场价
软件开发选择什么样的笔电
吉林数据软件开发价格
商丘哪里学计算机网络技术专业
面向对象数据库用
软件开发文档制作视频
罗湖专业网络安全运维
一台服务器部署几个应用
蕃茄网络技术有限公司
软件开发模式 变更控制
服务器防篡改使用心得
服务器安全设置 允许下载
岳阳软件开发制作
西安先通网络技术学校怎么样
中国联通上海数据库哪里查
共建网络安全协议
清华大学数据库检索技术
北京达因军慧网络技术
手机版1.17我的世界服务器
香港游戏服务器卡顿怎么办
热血江湖连接服务器
学一些什么网络技术可以挣钱
sql数据库表的主键
渭南市网络安全应急指挥中心地址
数据库菜单顺序
SQL管理平台 网络安全
iosapp软件开发服务多少钱