查看: 1265| 回复: 0
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] Morris Traversal 模板

全局:

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

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

x
解决问题 用O(1)的空间来访问所有的BST 上的点 结合Inorder 就可以输出从小到大的排序顺序

模板代码如下

  1. class Solution {
  2.     public void recoverTree(TreeNode root) {
  3.         while(root != null){
  4.             if(root.left != null){
  5.                 TreeNode temp = root.left;
  6.                 //目地是走到该左子树最右边的node
  7.                 while(temp.right != null && temp.right != root){
  8.                     temp = temp.right;
  9.                 }
  10.                 //如果while循环条件中任意一个不满足
  11.                 if(temp.right == null){
  12.                     temp.right = root;
  13.                     root = root.left;
  14.                 } else {
  15.                    //将该点断开
  16.                     temp.right = null;
  17.                     //visit root.val
  18.                     root = root.right;
  19.                 }
  20.             } else {
  21.                 //vsiite root.val
  22.                 root = root.right;
  23.             }
  24.         }
  25.     }
  26. }
复制代码
文章来源
1. https://www.youtube.com/watch?v=QZMropFflv4          (模板来源)
2. https://www.youtube.com/watch?v=wGXB9OWhPTg   (具体分析)


补充内容 (2021-12-10 06:08 +8:00):
学这个模板的目的是为了解决第99题的。个人感觉recursion就可以了,但是视频里说是 jvm的stack 也算是额外空间,所以用他。我觉得他说的不对,因为你临时变量也是存在jvm的stack当中的,并没有节省空间。这个算法的唯一目的就是为了替代iteration。因为Iteration的解法,我们需要用到Stack(数据结构的stack)肯定是要用到额外的空间的。因此采用morris traversal 可以有效的将额外空间从 o(n)降低到 o(1)

要不要掌握 看你们自己吧。多学一点东西是没错的。但是你时间紧迫就抓紧联系recursion就好了。

评分

参与人数 1大米 +10 收起 理由
14417335 + 10 给你点个赞!

查看全部评分


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

本版积分规则

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