本文介绍: 这是由二叉树的结构所决定的,每个节点都有指向孩子节点的指针,但是没有指向父节点的指针,所以需要利用栈来实现子节点回到父节点的效果。因为递归方法无非是利用函数栈来保存信息,可以寻找相应的数据结构替代函数栈,同样可以实现相同的功能。Morris 遍历的实质就是避免利用栈结构,让下层节点拥有指向上层的指针,具体是通过让底层节点指向 null 的空闲指针指向上层的某个节点,到达子节点指向父节点的效果。和后序完全相反的顺序,然后再将该顺序逆序,最后得到后序遍历的顺序。利用队列来实现层序遍历。
一、递归方法
递归比较简单,直接上代码:
### 1.1 先序遍历
1.2 中序遍历
1.3 后序遍历
二、迭代方法
能够用递归方法解决的问题基本都能用非递归方法实现。因为递归方法无非是利用函数栈来保存信息,可以寻找相应的数据结构替代函数栈,同样可以实现相同的功能。下面用栈,类比递归方法来统一实现三种遍历方式:
2.1 先序遍历
2.2 中序遍历
2.3 后序遍历
其实后序遍历,可以利用前序遍历中先遍历右子树,形成 根->右子树->左子树 和后序完全相反的顺序,然后再将该顺序逆序,最后得到后序遍历的顺序。
2.4 层序遍历
利用队列来实现层序遍历
基本思想是:
三、Morris 方法
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。