【刷题日记】589. N 叉树的前序遍历
本次刷题日记的第 4 篇,力扣题为:589. N 叉树的前序遍历 ,简单
一、题目描述:
乍一看,好像比我们之前做过的二叉树会难一点?其实并不是,万变不离其宗,解决方式都是一样的,那么我们一起来瞅一眼
二、思路分析:
1、这道题考察了什么思想?你的思路是什么?
我们在大学的时候有学习过,二叉树的前中后序遍历,如何分辨是前序,中序,后序?
简单的来说就是根在哪里,就是什么序,例如:
前序就是,根左右 , 先遍历树的根,再遍历左子树,最后遍历右子树
中序就是,左根右,先遍历树的左子树,再遍历根,最后遍历右子树
后序就是,左右根,先遍历树的左子树,再遍历右子树,最后遍历根
根据题目我们可以知道本次是多叉树,但是思路和二叉树是一样的,我们可以一起来看看
推演一下:
以案例中的示例一为例子
输入:root = [1,null,3,2,4,null,5,6] 输出:[1,3,5,6,2,4]
根据图中的推理过程,我们知道,前序遍历,我们可以按照根左右的遍历顺序来遍历一棵二叉树或者多叉树,思想是一样的
先遍历根,再遍历从左边开始的第一个儿子
那此时左边开始的第一个儿子作为根时同样按照根左右的思想为指导方针,先遍历根,再遍历自己的从左边开始的第一个儿子,直到把这棵树遍历完毕即可
2、尝试编码
func preorder(root *Node)(ans []int) { // 定义一个函数,用于递归 var dfs func(*Node) dfs = func(node *Node) { // 如果当前节点为空,则直接返回 if node == nil { return } // 当前节点为根节点,先加入结果集,然后遍历该节点为根节点的子树 ans = append(ans, node.Val) for _, ch := range node.Children { dfs(ch) } } dfs(root) return }
四、总结:
使用递归的思想来做二叉树或者多叉树的题是比较简单的,对于二叉树或者多叉树,可以使用递归的方式遍历,也可以使用迭代的方式来进行处理,迭代的方式后续遇到了我们可以再来分享一波
使用上述递归的方式来实现 二叉树 / 多叉树 的前序遍历
时间复杂度是 O(m) , 这个 m 表示的是 多叉树的节点个数
空间复杂度是 O(m)
原题地址:589. N 叉树的前序遍历
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~