题目描述
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
题目解析
前序遍历(先序遍历)顺序:根左右
可通过递归方式(栈),沿树状图,向下遍历,并将每次的 “中间节点” 放入数据集中。
代码
递归
# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
if root is None:
return res
def traversal(head: TreeNode):
if head is None:
return
res.append(head.val)
traversal(head.left)
traversal(head.right)
traversal(root)
return res
栈
原理还是递归,只是用栈来代替递归过程中系统开辟的递归栈
# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
from queue import LifoQueue
res = []
if root is None:
return res
stack = LifoQueue()
stack.put(root)
while not stack.empty():
tmp = stack.get()
if tmp is not None:
if tmp.right:
stack.put(tmp.right)
if tmp.left:
stack.put(tmp.left)
stack.put(tmp)
stack.put(None) # 打上出栈标识
else:
# 为空时,再次获取栈顶值
tmp = stack.get()
res.append(tmp.val)
return res
本文介绍了如何对二叉树进行前序遍历,分别给出了使用递归和栈两种方法的Python代码实现。递归方案直接按照根-左-右的顺序访问节点,而栈方案利用LIFO特性模拟递归过程,通过添加特殊标记处理空节点。
630

被折叠的 条评论
为什么被折叠?



