博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树(三)
阅读量:5167 次
发布时间:2019-06-13

本文共 1231 字,大约阅读时间需要 4 分钟。

迭代的树遍历

迭代扫描从树的最左端结点开始。从树根开始沿着左子节点链,直至定位一个具有空左子树的节点,该节点就是扫描的起始点。迭代器最初引用这个节点。根节点及其左子节点路径上所有中间节点都被压入堆栈。

树的迭代遍历基于下列一组规则:

  1. 在每个节点处,捕捉该节点的值。
  2. 如果这个节点的右分支不为空,那么就移动到该节点的右子节点,然后遍历左子节点路径直至定位一个具有空左子树的节点。遍历将所定位的节点标识为“下一个”节点。将对指定节点右子节点的引用与其左子节点路径上的所有中间节点都压入堆栈。
  3. 如果这个节点的右分支为空,那么就结束对该节点左分支、该节点本身以及该节点右分支的扫描。要访问的下一个节点位于堆栈中。如果堆栈不为空,那么就通过弹出操作来确定扫描中的下一个节点。如果堆栈为空,那么所有节点都已被访问,此时扫描结束。
  4. 1 public class InorderIterator
    implements Iterator
    2 { 3 private ALStack
    > s = null; 4 private TNode
    curr = null; 5 6 ... 7 } 8 private TNode
    goFarLeft(TNode
    t) 9 {10 if(t == null)11 return null;12 while(t.left != null)//最后一个节点不入栈13 {14 s.push(t);15 t = t.left;16 }17 return t;18 }19 public InorderIterator(TNode
    root)20 {21 s = new ALStack
    >();22 curr = goFarLeft(root);23 }24 public T next()25 {26 if(curr == null)27 throw new NoSuchElementException(28 "InorderScan: no elements remaining");29 T returnValue = curr.nodeValue;30 if(curr.right != null)31 curr = goFarLeft(curr.right);32 else if(!s.isEmpty())33 curr = (TNode
    )s.pop();34 return returnValue;35 }

     

转载于:https://www.cnblogs.com/wanghui390/p/3495428.html

你可能感兴趣的文章
【poj3294-不小于k个字符串中最长公共子串】后缀数组
查看>>
java如何获取其它用户登录的真是IP地址
查看>>
Jquery通过指定层次关系获取元素
查看>>
c# for 和 foreach 的区别
查看>>
docfx (一)
查看>>
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
查看>>
深度学习之前馈神经网络(前向传播和误差反向传播)
查看>>
IEnumerable<T>和IQueryable<T>区别
查看>>
(转)MFC界面风格
查看>>
Centos7 tmux1.6 安装
查看>>
二叉树(三)
查看>>
linux加密文件系统 fsck 无法修复一例
查看>>
【linux配置】VMware安装Redhat6.5
查看>>
AI自主决策——有限状态机
查看>>
Python装饰器学习笔记
查看>>
iframe父子窗口取值
查看>>
利用Python进行数据分析_Pandas_数据结构
查看>>
2018-2019 2 20175230《Java程序设计》第九周学习总结
查看>>
python3中sum
查看>>
spring声明式事务管理
查看>>