class TreeNode:
def __init__(self, val: int, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result =[]
def traversal(root: Optional[TreeNode]):
if root == None:
return
result.append(root.val)
traversal(root.left)
traversal(root.right)
traversal(root)
return result
递归思路:
注意traversal函数的函数参数:root根节点
注意结束递归条件:当root == None
注意每一次递归的逻辑:根据前中后序遍历,调整result.append(root.val)相对其它两步的位置
class TreeNode:
def __init__(self, val: int, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
result = []
stack = [root]
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
迭代思路:
运用stack的特点来迭代完成,注意根据栈的先进先出原则,在取得node.val值后需要先将右孩子入栈,再将左孩子入栈。如此才会按照node.val,左孩子,右孩子的顺序返回各节点值。
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: TreeNode) -> List[int]:
result = []
stack = []
if root:
stack.append(root)
while stack:
node = stack.pop()
if node != None:
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
stack.append(node)
stack.append(None)
else:
node = stack.pop()
result.append(node.val)
return result
迭代统一风格代码