码迷,mamicode.com
首页 > 其他好文 > 详细

线索二叉树

时间:2019-07-02 00:38:13      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:算法   问题   遍历   直接   bsp   递归   举例   流程   依次   

二叉树的中序遍历,最简单直接的办法当然是递归,但迭代法也可以解决这一问题,一种思路是利用栈,另一种思路是莫里斯遍历,其中使用了线索二叉树这样一种数据结构。

该算法流程如下:

Step 1: 将当前节点current初始化为根节点

Step 2: While current不为空,

若current没有左子节点

a. 将current添加到输出

b. 进入右子树,亦即, current = current.right

否则

a. 在current的左子树中,令current成为最右侧节点的右子节点

b. 进入左子树,亦即,current = current.left


举例而言:


       1
     /    \
   2      3
  /  \    /
4   5  6

首先,1 是根节点,所以将 current 初始化为 1。1 有左子节点 2,current 的左子树是

2
/ \
4 5
在此左子树中最右侧的节点是 5,于是将 current(1) 作为 5 的右子节点。令 current = cuurent.left (current = 2)。 现在二叉树的形状为:

2
/ \
4 5
    \
     1
       \
        3
      /
   6
对于 current(2),其左子节点为4,我们可以继续上述过程

4
  \
   2
     \
      5
        \ 
    1
    \
     3
      /
   6
由于 4 没有左子节点,添加 4 为输出,接着依次添加 2, 5, 1, 3 。节点 3 有左子节点 6,故重复以上过程。 最终的结果是 [4,2,5,1,6,3]。

该算法时间与空间复杂度均为O(n)。

解释来源于leetcode官方题解

线索二叉树

标签:算法   问题   遍历   直接   bsp   递归   举例   流程   依次   

原文地址:https://www.cnblogs.com/txltxl22/p/11117668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!