前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Morris遍历

Morris遍历

作者头像
mathor
发布2018-08-17 15:37:27
3650
发布2018-08-17 15:37:27
举报
文章被收录于专栏:mathor

 Morris算法遍历一棵二叉树,时间复杂度O(n),但是空间复杂度却只用神奇的O(1),下面说一下Morris遍历的流程,首先规定来到的当前结点即为cur

  1. 如果cur无左孩子(cur.left == null),cur向右移动(cur = cur.right)
  2. 如果cur有左孩子(cur.left != null),找到cur左子树上最右的结点,记为mostRight
    1. 如果mostRight无右孩子(mostRigt.rigth == null),则让其指向cur(mostRight = cur),同时cur向左移动(cur = cur.left)
    2. 如果mostRight的右孩子指向cur,则让其指向null(mostRight.right = null),同时cur向右移动(cur = cur.right)
先序Morris
代码语言:javascript
复制
public static void morrisPre(Node head) {
    if(head == null)
        return;
    Node cur = head;
    Node mostRight = null;
    while(cur != null) {
        mostRight = cur.left;
        if(mostRight != null) {
            while(mostRight.right != null && mostRight.right != cur)
                mostRight = mostRight.right;
            if(mostRight == null) {
                mostRight.right = cur;
                System.out.println(cur.value + " ");
                cur = cur.left;
                continue;
            } else
                mostRight.right = null;
        }
        cur = cur.right;
    }
    System.out.println();
}
中序Morris
代码语言:javascript
复制
public static void morrisPre(Node head) {
    if(head == null)
        return;
    Node cur = head;
    Node mostRight = null;
    while(cur != null) {
        mostRight = cur.left;
        if(mostRight != null) {
            while(mostRight.right != null && mostRight.right != cur)
                mostRight = mostRight.right;
            if(mostRight == null) {
                mostRight.right = cur;
                cur = cur.left;
                continue;
            } else
                mostRight.right = null;
        }
        System.out.println(cur.value + " ");
        cur = cur.right;
    }
    System.out.println();
}
后序Morris
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先序Morris
  • 中序Morris
  • 后序Morris
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档