二叉树的遍历:
二叉树的实现是链表,要记住自己定义二叉树,遍历就是用递归,记住递归传入的参数和返回值,递归结束条件, 不断缩小规模
递归法必须掌握,迭代法可以先了解
# 前序遍历-迭代-LC144_二叉树的前序遍历
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
# 根结点为空则返回空列表
if not root:
return []
stack = [root](stack里面加的是节点)
result = []
while stack:
node = stack.pop()
# 中结点先处理
result.append(node.val)(数组里加的是节点的值)
# 右孩子先入栈
if node.right:
stack.append(node.right)
# 左孩子后入栈
if node.left:
stack.append(node.left)
return result
后序遍历 中左右-》中右左-》翻转result列表得到左右中
中序遍历:
# 中序遍历-迭代-LC94_二叉树的中序遍历
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
stack = [] # 不能提前将root结点加入stack中
result = []
cur = root
while cur or stack:
# 先迭代访问最底层的左子树结点
if cur:
stack.append(cur)
cur = cur.left
# 到达最左结点后处理栈顶结点
else:
cur = stack.pop()
result.append(cur.val)
# 取栈顶元素右结点
cur = cur.right (这里需要好好想想,当右子树为空时,cur会变为栈顶元素,即返回了上一层子树)
return result
统一的迭代算法略过了