📣 独立日限时特惠: VIP通行证立减$68
查看: 4911| 回复: 15
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 关于tree题目recursive或者iterative做法的一个疑惑

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
在leetcode上看到很多tree的题目都是有recursive和iterative的两种做法,大部分时候都是想到recursive,iterative有时候很难想。想问下在面试过程中会遇到用了recursive之后要求再用iterative的情况吗?谢谢!

PS: 有没有哪些题是recursive会超时,只能用iterative的


补充内容 (2020-4-24 09:47):
楼下有好心小伙伴总结了三种遍历的iterative解法。
但其实我也想知道,除了这几个经典必背的之外,其他题目会遇到要求用iterative的时候吗

上一篇:还是问下题量
下一篇:优化解总是写不对怎么破
全局:
iterative的一个好处是,在你的stack会长的很长的时候相比recurisve不容易overflow.
回复

使用道具 举报

推荐
suanmeiguo 2020-4-22 15:15:01 | 只看该作者
全局:
我有个folder,里面有六种解法。。分别对应3种order对应的recursive和iterative。。没办法有的不是那么intuitive的背下来吧。。

这里是iterative的,一般不是那么明显还是需要总结一下:


  1. # inorder iterative
  2. class Solution:
  3.     def inorderTraversal(self, root: TreeNode) -> List[int]:
  4.         """DFS traversal in order implementation"""
  5.         res = []
  6.         stack = []
  7.         curr = root

  8.         while curr or stack:
  9.             while curr:
  10.                 stack.append(curr)
  11.                 curr = curr.left

  12.             curr = stack.pop()
  13.             res.append(curr.val)

  14.             curr = curr.right

  15.         return res
复制代码

  1. # preorder iterative
  2. class Solution:
  3.     def preorderTraversal(self, root: TreeNode) -> List[int]:
  4.         if not root:
  5.             return []
  6.         res = []
  7.         stack = [root]

  8.         while stack:
  9.             curr = stack.pop()
  10.             if not curr:
  11.                 continue
  12.             res.append(curr.val)
  13.             stack.append(curr.right)
  14.             stack.append(curr.left)

  15.         return res
复制代码

  1. # postorder iterative
  2. class Solution:
  3.     def postorderTraversal(self, root: TreeNode) -> List[int]:
  4.         if not root:
  5.             return []
  6.         res = []
  7.         stack = [root]

  8.         while stack:
  9.             curr = stack.pop()
  10.             if not curr:
  11.                 continue
  12.             res.append(curr.val)
  13.             stack.append(curr.left)
  14.             stack.append(curr.right)

  15.         return res[::-1]
复制代码

评分

参与人数 1大米 +2 收起 理由
不知道小帅 + 2 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
我每次见到这次问题就想到孔乙己回字的写法
回复

使用道具 举报

全局:
遇到过, Google 电面跟vo
面试官说让你iterate 一下,你能说no?
回复

使用道具 举报

🔗
tm1234 2020-4-21 12:46:31 来自APP | 只看该作者
全局:
jun900928 发表于 2020/04/21 11:18:30
遇到过, Google 电面跟vo
面试官说让你iterate 一下,你能说no?
请问层主还记得要求iterative的是哪个序遍历吗?谢谢!
回复

使用道具 举报

🔗
cccxxxzzzz 2020-4-22 00:20:05 | 只看该作者
全局:
小建议inorder,preorder,postorder用两种方法implement下都要会哇
回复

使用道具 举报

🔗
 楼主| catchyzheng 2020-4-30 11:39:02 | 只看该作者
全局:
cccxxxzzzz 发表于 2020-4-22 00:20
小建议inorder,preorder,postorder用两种方法implement下都要会哇

是的我有专门记下的,谢谢你提醒!
回复

使用道具 举报

🔗
 楼主| catchyzheng 2020-4-30 11:39:47 | 只看该作者
全局:
Ken.Andrew 发表于 2020-4-22 15:22
我每次见到这次问题就想到孔乙己回字的写法

真是个奇妙的联想
回复

使用道具 举报

🔗
yyfyifan 2020-4-30 12:30:16 | 只看该作者
全局:
前段时间面试Google,原题要求写tree的三种遍历,iterative方式。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表