• 每日leetcode-数组-144. 二叉树的前序遍历


    分类:二叉树-二叉树的遍历

    题目描述:

    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

    解题思路:

    递归:

    定义 preorder(root) 表示当前遍历到 root 节点的答案。按照定义,我们只要首先将 root 节点的值加入答案,然后递归调用 preorder(root.left) 来遍历 root 节点的左子树,最后递归调用 preorder(root.right) 来遍历 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: TreeNode) -> List[int]:
            def preorder(root:TreeNode):
                if not root:
                    return []
                res.append(root.val)
                preorder(root.left)
                preorder(root.right)
            res = list()
            preorder(root)
            return res

    时间复杂度:O(n)其中 n 是二叉树的节点数。每一个节点恰好被遍历一次。

    空间复杂度:O(n)为递归过程中栈的开销,平均情况下为 O(log n)O(logn),最坏情况下树呈现链状,为 O(n)O(n)。

    迭代:

    # 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: TreeNode) -> List[int]:
            if not root:
                return []
            res,stack = list(),list()
            stack.append(root) # 利用栈进行临时存储
            while len(stack):
                curr = stack.pop() # 取出一个节点,表示开始访问以该节点为根的子树
                res.append(curr.val) # 首先访问该节点(先序),之后顺序入栈右子树,左子树
                if curr.right:
                    stack.append(curr.right)
                if curr.left:
                    stack.append(curr.left)
            return res

    时间复杂度O(n)

    空间复杂度O(n)

  • 相关阅读:
    15款经典图表软件推荐 创建最漂亮的图表
    CSS+JS打造的自适应宽度的滑动门和选项卡
    兼容多浏览器的加入收藏代码
    指针与引用深层次的区别
    反编译winform资源文件
    程序创业必过三关
    自动ping博客服务程序
    C#批量加水印程序
    C#应用程序随机启动
    失败降临是命中注定
  • 原文地址:https://www.cnblogs.com/LLLLgR/p/14978345.html
Copyright © 2020-2023  润新知