二叉树中序遍历三种方式
- 递归遍历
- 迭代遍历
- 莫里斯遍历

树的定义
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
递归遍历
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
ans = []
def solution(root:TreeNode):
if root:
solution(root.left)
ans.append(root.val)
solution(root.right)
solution(root)
return ans
迭代遍历
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
#保存入栈元素
queue = []
#保存遍历结果
ans = []
while queue or root:
#如果当前结点不为空,则将结点入栈,并将结点左子结点赋值给root
#目的为了寻找二叉树最左边的结点
if root:
queue.append(root)
root = root.left
#如果当前结点为空,则从栈中取出一个元素,并添加遍历结果,将右结点赋值给root
#开始右结点的遍历
else:
tem = queue.pop()
ans.append(tem.val)
root = tem.right
return ans
莫里斯遍历
解题思路
我们将红色框选部分挂到节点4的右子树上,这样整棵树基本上就变改成了一个链表了,之后再不断往右遍历。


代码如下
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
ans = []
pre = None
while root:
if root.left:
pre = root.left
while pre.right:
pre = pre.right
tem = root
pre.right = root
tem.left = None
else:
ans.append(root.val)
root = root.right
return ans
二叉树中序遍历详解
本文深入探讨了二叉树中序遍历的三种方法:递归遍历、迭代遍历和莫里斯遍历,提供了详细的算法实现和解析,帮助读者理解不同遍历方式的原理与应用。
446

被折叠的 条评论
为什么被折叠?



