https://leetcode.com/problems/binary-tree-inorder-traversal/description/
二叉树中序遍历。
思路1:最简单的,递归
# 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]
"""
res = []
self.travel(root, res)
return res
def travel(self, root, res): #辅助函数,注意要将结果集作为参数传入,才能在递归中修改结果集
if root:
self.travel(root.left, res)
res.append(root.val)
self.travel(root.right, res)
思路2:用栈。用一个工作节点p遍历整棵树。思路是先一直进入左子,直到叶节点,期间将所有路途节点入栈。到达最左叶节点后弹栈,进入右子树。
class Solution:
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
p = root #工作节点
stack = []
while p or len(stack) > 0:
while p: #一直走左分支,直到叶节点
stack.append(p)
p = p.left
#到达最左叶节点后弹栈,进入右子树
if len(stack) > 0:
p = stack.pop()
res.append(p.val) #访问
p = p.right
return res