IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 二叉树的莫里斯遍历 -> 正文阅读

[数据结构与算法]二叉树的莫里斯遍历

一、中序遍历

1.1 算法思路

中序遍历要求每个结点被遍历一次,最优时间复杂度为O(n),递归和迭代都需要记录中间状态。
在这里插入图片描述
注意观察需要改变指向的节点的共同特点
? E是A的左子树的中序遍历最后一个点(可以理解为最近的前继节点)
? D是B的中序遍历最后一个点(可以理解为最近的前继节点)

1.2 算法描述

假设当前遍历至结点x:

  1. 如果x没有左子树,将其加入目标序列,再遍历右子树,x=x.right
  2. 如果x有左子树,找到左子树上中序遍历最后一个结点(记作ex-point)
    ? 如果ex-point的右子树为空,则将其指向x,访问x的左子树,x=x.left
    ? 如果ex-point右子树不为空,此时其右子树已经指向x,说明左子树已经遍历完成,将ex-point右子树置空,将x加入目标序列,然后访问x的右子树,x=x.right

1.3 代码实现

 public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        TreeNode exPoint =null;

        while(root!=null){
            //step1 找到左子树中序遍历最后一个节点
            if(root.left!=null){
               exPoint=root.left;
               //exPoint.right!=root 判断是否已经改变指向
               while(exPoint.right!=null && exPoint.right!=root){
                   exPoint=exPoint.right;
               }

               if(exPoint.right == null){
                   //将exPoint指向root,建立关系,进行左遍历
                   exPoint.right=root;
                   root=root.left;
               }else{
                    //遍历完毕,断开连接,进行右遍历
                   res.add(root.val);
                   exPoint.right=null;
                   root=root.right;
               }
            }else{
                res.add(root.val);
                root=root.right;
            }
        }
        return res;
    }
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:24:22  更:2021-09-12 13:25:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 13:52:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码