给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
中序遍历:先遍历左子树,然后访问根节点,然后遍历右子树。
来源:https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/2/traverse-a-tree/2/
方法1:递归
思路:
如果为空,则返回空
如果不为空,先取出左子树的值,再取出根节点值,最后取出右子树值
代码:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
方法2:迭代
代码:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
cur = root
stack = []
res = []
while cur or stack:
# 将当前节点的左孩子压入栈中
while cur:
stack.append(cur)
cur = cur.left
# 弹出最后一个左孩子
cur = stack.pop()
res.append(cur.val)
# 如果存在右孩子,则继续遍历
cur = cur.right
return res