题目描述:
给定一个二叉树,返回其中序遍历。
例如:
给定二叉树 [1,null,2,3],
1
\
2
/
3
返回 [1,3,2].
说明: 递归算法很简单,你可以通过迭代算法完成吗?
我的思路:
就是非递归遍历二叉树,用栈来实现。基本原则是,如果有左孩子进栈,知道没有左孩子。如果栈不空,弹出栈顶元素,同时去遍历根节点的右子树。在节点不空或者栈不空的情况下进行循环。
我的代码:
class Solution:
def inorderTraversal(self, root):
rel = []
self.inorder(root, rel)
return rel
def inorder(self, root, rel):
if root:
self.inorder(root.left, rel)
rel.append(root.val)
self.inorder(root.right, rel)# 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):
"""
:type root: TreeNode
:rtype: List[int]
"""
stack = []
rel = []
while True:
while root:
stack.append(root)
root = root.left
if not stack:
return rel
node = stack.pop()
rel.append(node.val)
root = node.rightDiscuss:
学到:
二叉树的基本操作不能忘,可以自己试着写下先序遍历的递归非递归。
本文介绍了一种使用栈实现二叉树中序遍历的非递归算法,并提供了详细的代码示例。通过该方法,可以有效地遍历二叉树并按中序顺序收集节点值。
361

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



