题目描述:给定一个二叉树的根节点 root ,返回 它的 前序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
思路:递归
时间复杂度:O(n),n为节点数,访问每个节点恰好一次。
空间复杂度:空间复杂度:O(h),h为树的高度。最坏情况下需要空间O(n),平均情况为O(logn)
python:
第一种解法:
# 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]:if not root:return []return [root.val]+self.preorderTraversal(root.left)+self.preorderTraversal(root.right)
第二种解法:深度优先搜索(遍历一个节点,会把当前子节点的子节点遍历完成,直到不含有子节点,会去遍历上一层的节点)
# 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]:# cur表示当前遍历的节点def dfs(cur):if not cur:returnres.append(cur.val)dfs(cur.left)dfs(cur.right)res=[]dfs(root)return res