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

二叉树的Morris遍历

原创
作者头像
大学里的混子
修改2019-02-25 11:03:08
3530
修改2019-02-25 11:03:08
举报
文章被收录于专栏:LeetCode

一、中序遍历

代码语言:javascript
复制
public static void morrisIn(TreeNode root) {
    if (root == null) return;
    TreeNode cur = root;
    TreeNode mostRight = null;
    while (cur != null){
        if (cur.left != null){
            mostRight = cur.left;
            while (mostRight.right != null && mostRight.right != cur){
                mostRight = mostRight.right;
            }
            if (mostRight.right == null){
                mostRight.right = cur;
                cur = cur.left;
                continue;
            }else {
                mostRight.right = null;
            }
        }
        System.out.print(cur.val+" ");
        cur = cur.right;
    }
    System.out.println();
}

二、前序遍历

代码语言:javascript
复制
public static void morrisPre(TreeNode root) {
    if (root == null) return;
    TreeNode cur = root;
    TreeNode mostRight = null;
    while (cur != null){
        // 如果cur没有左孩子
        if (cur.left != null){
            mostRight = cur.left;
            while (mostRight.right != null && mostRight.right != cur){
                mostRight = mostRight.right;
            }
            // 由于 如果 mostRight.right == null 那么这里必然是没有左孩子的cur
            if (mostRight.right == null){
                System.out.print(cur.val+" ");
                mostRight.right = cur;
                cur = cur.left;
                continue;
            }else {
                mostRight.right = null;
            }
        }else {
            //cur有左孩子,那么必然会经历两次,在第一次来的时候就打印
            System.out.print(cur.val+" ");
        }
        cur = cur.right;
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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