当前位置: 首页 > news >正文

可视化图解算法: 二叉树的前序遍历

1. 题目

描述

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

数据范围:二叉树的节点数量满足 0≤n≤100 ,二叉树节点的值满足1≤val≤100 ,树的各节点的值各不相同

示例 1

输入:

{1,#,2,3}

返回值:

[1,2,3]

2. 解题思路

需要先明确二叉树前序遍历的规则:

二叉树的遍历一般使用【递归】的方法。如果要采用递归方法需满足递归的2个条件:

可以看出,对于左子树、右子树的遍历操作与整个二叉树一样,只是数据规模不同。

对于整颗二叉树来说,叶子节点左右子树都是Null,满足递归的第二个条件:不能无限循环,有终止条件(节点为Null)。因此可以使用递归来完成二叉树的前序遍历。

这时,就可以依据前序遍历的规则写出递推公式与伪代码:

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1371454

  • Java编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367104

  • Golang编码:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364644

3. 编码实现

核心代码如下:

/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
 */
func preorderTraversal(root *TreeNode) []int {
	// write code here
	list := make([]int, 0)
	preOrder(&list, root) //注意:传递的是切片对应的指针(切片的地址),否则会变成值传递,最后返回空切片
	return list

}

func preOrder(list *[]int, root *TreeNode) {
	// 2. 递归终止条件:遇到空节点则返回
	if root == nil {
		return
	}

	// 1. 问题分解(递推公式)
	// 1.1 先遍历根节点
	*list = append(*list, root.Val)

	// 1.2 再去左子树
	preOrder(list, root.Left)

	// 1.3 最后去右子树
	preOrder(list, root.Right)
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1371454

  • Java编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367104

  • Golang编码:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364644

4.小结

前序遍历的规则是:先节点、再左子树、最后右子树。

二叉树的前序遍历满足递归的两个条件,因此可以通过递归很快写出对应的递推公式:

f(node)= output(node.val) + f(node.左子树) +f (node.右子树) ,其中 f (空节点) = 空。

再根据递推公式就可以很快将其翻译成对应的代码。


《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:

✅ 链表 ✅ 二叉树 ✅二分查找、排序 ✅ 堆、栈、队列 ✅回溯算法 ✅ 哈希算法 ✅ 动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1509965

  • Java编码实现:数据结构笔试面试算法-Java语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Java语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1510007

  • Golang编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1509945

对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:接天莲叶无穷碧,映日荷花别样红。

http://www.dtcms.com/a/99600.html

相关文章:

  • 算法-前缀和与差分
  • 【hadoop】远程调试环境
  • 用Python打造智能宠物:强化学习的奇妙之旅
  • 计算机三级信息安全部分英文缩写
  • 【MyBatis】MyBatis 操作数据库
  • Windows学习笔记(4)关于MITRE
  • 解决 FFmpeg 使用 C/C++ 接口时,解码没有 shell 快的问题(使用多线程)
  • 用Python实现资本资产定价模型(CAPM)
  • ubuntu 安装mysql
  • Python 中列表(List)、元组(Tuple)、集合(Set)和字典(Dict)四大数据结构的完整对比
  • macOS Jdk1.8安装(目前主流版本的jdk)
  • 【漫话机器学习系列】163.方差膨胀因子(Variance Inflation Factor, VIF)
  • Spring 通过多种方式实现使用线程
  • 在用redis当中可能遇到的问题解决方案以及redis中的一些名词解释
  • HTML 标签类型全面介绍
  • docker-compese 启动mysql8.0.36与phpmyadmin,并使用web连接数据库
  • Reactive编程:数据流和观察者
  • MySQL多表查询实验
  • c++-引用
  • 【STM32】WDG看门狗(学习笔记)
  • 积分赛——串口控制指示灯
  • MySQL排序详解
  • vue3 响应式系统指南
  • 无人机中继传输数据链技术,(无人机+自组网)远距离传输技术实现详解
  • 大唐杯02 DTM.PX4.016
  • 企业级知识库建设:自建与开源产品集成的全景解析 —— 产品经理、CTO 与 CDO 的深度对话
  • Python基础知识第二天:从格式化到流程控制
  • VSCode Java 单元测试没有运行按钮
  • 代码随想录day2 数组总结
  • 03-SpringBoot3入门-配置文件(自定义配置及读取)