leetcode刷题——N-aryTree

前言

在完成二叉树的遍历后,我们看N叉树,教程中分为两部分介绍N-aryTree:遍历与递归

 


遍历

N叉树的遍历也分为深度优先搜索(DFS)和广度优先搜索(BFS)。

DFS中只有前序遍历和后序遍历,因为有了多个子节点,中序遍历中到底在哪个子节点后遍历这个问题,一般不做考虑。

前序遍历先访问根节点,然后依次遍历子节点。

后序遍历先依次遍历字节点,然后访问根节点。

在教程卡中,列出了两道题目要求实现两种遍历方式。

  1.  N-ary Tree Preorder Traversal,要求使用迭代方式而非递归方式对树进行前序遍历。这里使用栈进行存储将子节点倒序排列,依次压入栈中。然后从栈顶拿出第一个节点持续上述过程,直到栈中无元素。
  2.  N-ary Tree Postorder Traversal,这里解法比较巧妙。将元素放入栈中,之后正序压入栈中。然后拿出栈顶第一个节点,将值放入结果,再取出子节点持续上述过程,直到栈中无元素。最后返回值是倒序结果。遇到后序遍历我们可以把它想象成为删除树节点的过程。

以上就是使用栈进行DFS的方法。

BFS的遍历也很简单,与二叉树的BFS类似,使用队列进行迭代。

  1.  N-ary Tree Level Order Traversal,使用队列进行迭代,同时用元祖记录子节点的层数,到下一节点层数加一并加入到队列。

递归

教程卡中给的示例不多,一道普通的计算多叉树深度

  1.  Maximum Depth of N-ary Tree,这里思路其实就是每个节点的最深度等于下面节点最深度的最大值。每层节点递归时候深度加1,最后一层节点是子节点时候返回。与二叉树不同的是要用for循环迭代的递归一下每个子节点,获取最大值。这里我犯的错误是最大值用了全局变量,导致右侧的树总是能取到之前子树的最大值。因此最大值这里一定是每层递归中的局部变量,记录当前层中最大值,最后+1返回到上一层。

完成了多叉树的教程卡之后,我们下一步将目光转向Trie字典树。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值