题目:给定一个二叉树,返回它的中序 遍历。
思路:
- 递归
- 迭代:构建一个栈,依次遍历存入左节点,到底弹出栈顶,并开始遍历右节点
递归
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ret = []
def backtrack(head):
if not head: return
if head.left:
backtrack(head.left)
ret.append(head.val)
if head.right:
backtrack(head.right)
backtrack(root)
return ret
迭代
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ret = []
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
temp = stack.pop()
ret.append(temp.val)
root = temp.right
return ret