题目

给定一个二叉树的根节点root,返回它的中序遍历。
image.png

思路

递归实现很简单。

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution:
  8. def inorderTraversal(self, root: TreeNode) -> List[int]:
  9. # 左 根 右
  10. if root is None:
  11. return []
  12. return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)

迭代算法实现 重点重点

  1. # Definition for a binary tree node.
  2. # class TreeNode:
  3. # def __init__(self, x):
  4. # self.val = x
  5. # self.left = None
  6. # self.right = None
  7. class Solution:
  8. def inorderTraversal(self, root: TreeNode) -> List[int]:
  9. # 左 根 右
  10. ans = []
  11. if root is None: return ans
  12. s = [] # 定义一个显式栈stack
  13. while root is not None or len(s) != 0:
  14. while root is not None:
  15. s.append(root)
  16. root = root.left
  17. root = s.pop()
  18. ans.append(root.val)
  19. root = root.right
  20. return ans