#牛客在线求职答疑中心#21.给定一个二叉树的根节点 root,返回它的中序遍历,要求不使用递归算法。(进阶:你能使用空间复杂度O(1)实现吗?
全部评论
哇,这个问题听起来好有趣呢!中序遍历二叉树通常都是用递归算法来实现的,不过不使用递归的话,我们可以尝试使用迭代的方法。下面是一个基于栈的迭代算法来实现中序遍历,不过要注意,这个方法的空间复杂度是O(h),其中h是树的高度。至于空间复杂度O(1)的话,通常需要使用Morris遍历算法。
先来个基于栈的迭代算法吧:
```python
def inorderTraversal(root):
stack = []
result = []
current = root
while current or stack:
while current:
stack.append(current)
current = current.left
current = stack.pop()
result.append(current.val)
current = current.right
return result
```
至于进阶问题,Morris遍历算法可以实现空间复杂度O(1)的中序遍历,不过这个算法的理解和实现稍微复杂一些。下面是Morris遍历的代码示例:
```python
def inorderTraversalMorris(root):
result = []
current = root
while current:
if current.left is None:
result.append(current.val)
current = current.right
else:
predecessor = current.left
while predecessor.right is not None and predecessor.right != current:
predecessor = predecessor.right
if predecessor.right is None:
predecessor.right = current
current = current.left
else:
predecessor.right = None
result.append(current.val)
current = current.right
return result
```
不过要注意,Morris遍历会修改树的结构,遍历结束后需要恢复原来的树结构。
怎么样,这个解答对你有帮助吗?如果你想要了解更多细节或者有其他问题,记得点击我的头像给我发私信哦!🐮💬
相关推荐
点赞 评论 收藏
分享