当前位置: 首页 > news >正文

巨野有做网站的公司吗南京城市规划建设展览馆网站

巨野有做网站的公司吗,南京城市规划建设展览馆网站,中国标准溶液网站建设,网站如何做才能被360收录Python算法题集_翻转二叉树 题226:翻转二叉树1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【DFS递归】2) 改进版一【BFS迭代,节点循环】3) 改进版二【BFS迭代,列表循环】 4. 最优算法 本文为Python算法题集…

 Python算法题集_翻转二叉树

  • 题226:翻转二叉树
  • 1. 示例说明
  • 2. 题目解析
    • - 题意分解
    • - 优化思路
    • - 测量工具
  • 3. 代码展开
    • 1) 标准求解【DFS递归】
    • 2) 改进版一【BFS迭代,节点循环】
    • 3) 改进版二【BFS迭代,列表循环】
  • 4. 最优算法

本文为Python算法题集之一的代码示例

题226:翻转二叉树

1. 示例说明

  • 示例 1:

    在这里插入图片描述

    输入:root = [4,2,7,1,3,6,9]
    输出:[4,7,2,9,6,3,1]
    

    示例 2:

    在这里插入图片描述

    输入:root = [2,1,3]
    输出:[2,3,1]
    

    示例 3:

    输入:root = []
    输出:[]
    

    提示:

    • 树中节点数目范围在 [0, 100]
    • -100 <= Node.val <= 100

2. 题目解析

- 题意分解

  1. 本题为二叉树的翻转
  2. 基本的设计思路是深度优先算法【DFS(Depth-First Search)】、广度有限算法【BFS(Breadth-First Search)】

- 优化思路

  1. 通常优化:减少循环层次

  2. 通常优化:增加分支,减少计算集

  3. 通常优化:采用内置算法来提升计算速度

  4. 分析题目特点,分析最优解

    1. 可以考虑采用迭代法改写递归函数,提高性能

- 测量工具

  • 本地化测试说明:LeetCode网站测试运行时数据波动很大,因此需要本地化测试解决这个问题
  • CheckFuncPerf(本地化函数用时和内存占用测试模块)已上传到CSDN,地址:Python算法题集_检测函数用时和内存占用的模块
  • 本题本地化超时测试用例自己生成,详见【最优算法章节】

3. 代码展开

1) 标准求解【DFS递归】

采用深度优先算法,标准递归实现

马马虎虎,超过66%在这里插入图片描述

import CheckFuncPerf as cfpclass Solution:def invertTree_base(self, root):if not root:return Noneroot.left, root.right = root.right, root.leftself.invertTree_base(root.left)self.invertTree_base(root.right)return rootaroot = generate_binary_tree(ilen)
aSolution = Solution()
result = cfp.getTimeMemoryStr(Solution.invertTree_base, aSolution, aroot)
print(result['msg'], '执行结果 = {}'.format(result['result'].val))# 运行结果
函数 invertTree_base 的运行时间为 600.12 ms;内存使用量为 4.00 KB 执行结果 = 71

2) 改进版一【BFS迭代,节点循环】

通过堆栈结构的迭代算法来改写递归算法,单次循环一个节点

性能良好,超过82%在这里插入图片描述

import CheckFuncPerf as cfpclass Solution:def invertTree_ext1(self, root):if not root:return Nonestacktree = [root]while stacktree:tmpnode = stacktree.pop()tmpnode.left, tmpnode.right = tmpnode.right, tmpnode.leftif tmpnode.right:stacktree.append(tmpnode.right)if tmpnode.left:stacktree.append(tmpnode.left)return rootaroot = generate_binary_tree(ilen)
aSolution = Solution()
result = cfp.getTimeMemoryStr(Solution.invertTree_ext1, aSolution, aroot)
print(result['msg'], '执行结果 = {}'.format(result['result'].val))# 运行结果
函数 invertTree_ext1 的运行时间为 546.13 ms;内存使用量为 0.00 KB 执行结果 = 7

3) 改进版二【BFS迭代,列表循环】

通过队列结构的迭代算法来改写递归算法,每次循环一个批次,减少了部分循环判断计算

勉强通关,超过19%在这里插入图片描述

import CheckFuncPerf as cfpclass Solution:def invertTree_ext2(self, root):if not root:return NonequeueTree = [root]while queueTree:for iIdx in range(len(queueTree)):tmpnode = queueTree.pop()tmpnode.left, tmpnode.right = tmpnode.right, tmpnode.leftif tmpnode.left:queueTree.append(tmpnode.left)if tmpnode.right:queueTree.append(tmpnode.right)return rootaroot = generate_binary_tree(ilen)
aSolution = Solution()
result = cfp.getTimeMemoryStr(Solution.invertTree_ext2, aSolution, aroot)
print(result['msg'], '执行结果 = {}'.format(result['result'].val))# 运行结果
函数 invertTree_ext2 的运行时间为 471.11 ms;内存使用量为 0.00 KB 执行结果 = 21

4. 最优算法

根据本地日志分析,最优算法为第3种方式【BFS迭代,列表循环】inorderTraversal_ext2

import random
ilen = 1000000
def generate_binary_tree(node_count):if node_count <= 0:return Noneroot = TreeNode(random.randint(1, 100))left = generate_binary_tree(node_count // 2)right = generate_binary_tree(node_count // 2)root.left = leftroot.right = rightreturn root
aroot = generate_binary_tree(ilen)
aSolution = Solution()
result = cfp.getTimeMemoryStr(Solution.invertTree_base, aSolution, aroot)
print(result['msg'], '执行结果 = {}'.format(result['result'].val))
aroot = generate_binary_tree(ilen)
result = cfp.getTimeMemoryStr(Solution.invertTree_ext1, aSolution, aroot)
print(result['msg'], '执行结果 = {}'.format(result['result'].val))
aroot = generate_binary_tree(ilen)
result = cfp.getTimeMemoryStr(Solution.invertTree_ext2, aSolution, aroot)
print(result['msg'], '执行结果 = {}'.format(result['result'].val))# 算法本地速度实测比较
函数 invertTree_base 的运行时间为 600.12 ms;内存使用量为 4.00 KB 执行结果 = 71
函数 invertTree_ext1 的运行时间为 546.13 ms;内存使用量为 0.00 KB 执行结果 = 7
函数 invertTree_ext2 的运行时间为 471.11 ms;内存使用量为 0.00 KB 执行结果 = 21

一日练,一日功,一日不练十日空

may the odds be ever in your favor ~

http://www.yayakq.cn/news/363941/

相关文章:

  • 电子商务企业网站建设前期规划方案房屋建筑设计说明
  • 17zwd一起做网店潮汕站番禺开发网站费用
  • 为什么一个网站外链那么多怎么做仲博注册网站
  • 手机网站案例网站优化外包公司
  • 美容医疗手机网站模板重庆新闻第一眼
  • 邯郸做商城网站的公司网站seo评测
  • 快速建站网站啦公众号登录手机版
  • 商务网站建设工程师dw不用代码做网站
  • 网站建设定制公众号小程序设计相关的网站
  • 珠海仿站定制模板建站设计公司怎么找客户
  • 免费销售网站模板下载安装哈尔滨网站推广公司
  • 温州制造作网站肇庆市场核酸检测
  • 如何将自己做的网站挂到服务器上咨询类网站开发的意义
  • 关于网站建设的可行性报告软件培训机构排行榜
  • 插画师个人网站是怎么做的自己学做网站
  • 网站建设图片尺寸要求服装网站制作
  • 建设企业网站的哪家好优秀国外设计网站
  • 外贸功能网站建设建设部执业资格注册中心网站
  • 凡客家居怎么样网站建设品牌推广seo
  • 石家庄网站建设方案咨询外包加工网下载
  • 网站首页图片大全建设服装网站的意义
  • 网站后台不能排版网页棋牌开发
  • 肃宁哪里建网站网站制作长春
  • 服装网站建设的宗旨有哪些网站建设案例资讯
  • 筑巢做网站怎么样网站建设 管理系统开发
  • 一个公司做2个产品网站怎么做的网页传奇app
  • 网站设计制作新报价建设网站一般要多钱
  • 网站建设资料手机的网站有哪些
  • 南宁住房和城乡建设部网站如何将微信和企业网站同步
  • 品牌型 网站建设2020北京冬奥会网页制作