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

嵌入式培训心得体会吉林seo外包

嵌入式培训心得体会,吉林seo外包,做系统进化树的网站,高端品牌名称二叉树专题,重点掌握后续的递归和中间节点的处理。 104. 二叉树的最大深度 - 力扣(LeetCode) 本题在前一章已经解决了层序遍历的解法,现在来聊一下递归法。 首先需要明确两个概念:深度和高度。(注意&…

 二叉树专题,重点掌握后续的递归和中间节点的处理。

104. 二叉树的最大深度 - 力扣(LeetCode)

本题在前一章已经解决了层序遍历的解法,现在来聊一下递归法。

首先需要明确两个概念:深度和高度。(注意,起始位置的值都是1)

        深度:从root开始,到当前位置所在节点的层数;

        高度:从底层叶子节点开始,到当前所在节点的层数。

再来说一下选择什么顺序来遍历。

        前序:从root出发,直接找的是深度;

        后序:从叶子节点出发,返回给root节点高度。

也就是说,不管选择哪一种,中间节点都是单独处理的

后序遍历

按照递归的书写三部曲,可以写出后序遍历的方法。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def maxDepth(self, root):""":type root: TreeNode:rtype: int"""# 后序遍历(Version 1)# step1 确定返回值类型:TreeNode# step2 确定终止条件:当前节点是空if not root:return 0else:# step3 单层处理:按照“左右中”的顺序,先遍历左节点高度,再遍历右节点高度,汇总到中间节点取较大值,再加1(因为当前中间节点也算作一层)left_height = self.maxDepth(root.left)right_height = self.maxDepth(root.right)return max(left_height, right_height) + 1# 精简递归(Version 2)return 0 if not root else max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1

前序遍历

要麻烦很多,还涉及到回溯算法,十分甚至九分的不推荐

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def maxDepth(self, root):""":type root: TreeNode:rtype: int"""# 递归(前序遍历)res = 0if not root:return 0self.getdepth(root, 1)return resdef getdepth(self, node, depth):res = max(depth, res)if node.left == None and node.right == None:returnif node.left:depth += 1self.getdepth(node.left, depth)depth -= 1  # 回溯算法if node.right:depth += 1self.getdepth(node.right, depth)depth -= 1return

559. N 叉树的最大深度 - 力扣(LeetCode)

和上面相似的一道题,只用了递归+左右中的后序遍历。

只需要用for遍历所有孩子节点(其实就是上面分别判断左节点和右节点的推广)。

"""
# Definition for a Node.
class Node(object):def __init__(self, val=None, children=None):self.val = valself.children = children
"""class Solution(object):def maxDepth(self, root):""":type root: Node:rtype: int"""if not root:return 0max_depth = 1  # 在排除顶部节点是空的时候初始化最大值是1# 遍历所有的孩子节点for child in root.children:# 注意在每次比较的时候+ 1,表示计算上了中间节点max_depth = max(self.maxDepth(child) + 1, max_depth)return max_depth

 111. 二叉树的最小深度 - 力扣(LeetCode)

本题需要注意的是和上面求解最大值需要遍历到底不一样,本题需要遍历到第一个叶子节点,也就是左右子树都没有的第一个节点。

依然使用后序遍历

递归法 

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def minDepth(self, root):""":type root: TreeNode:rtype: int"""# 递归法if not root:return 0else:# 左left_height = self.minDepth(root.left)# 右right_height = self.minDepth(root.right)# 中if root.left and root.right == None:  # 左子树存在,右子树不存在return left_height + 1if root.right and root.left == None:  # 右子树存在左子树不存在return right_height + 1# 遇到叶子节点返回到中间节点的最小值return min(left_height, right_height) + 1

精简递归

把求解左右高度的简化到中间处理的返回值处。

            # 左left_height = self.minDepth(root.left)# 右right_height = self.minDepth(root.right)

222. 完全二叉树的节点个数 - 力扣(LeetCode)

递归(后序遍历)

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def countNodes(self, root):""":type root: TreeNode:rtype: int"""# 当作普通二叉树if not root:return 0# 左left_num = self.countNodes(root.left)# 右right_num = self.countNodes(root.right)# 中return left_num + right_num + 1# 精简版if not root:return 0return self.countNodes(root.left) + self.countNodes(root.right) + 1

利用完全二叉树递归

题干当中还特别说明了是完全二叉树,所以我们可以使用完全二叉树在左右外侧深度相等的时候是满二叉树的性质来统计。

简单概括就是:如果这一层的左子树的左深度和右子树的右深度相等,那么就可以判断现在这是满二叉树。

利用这个性质,我们就很容易可以判断满足满二叉树的条件。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def countNodes(self, root):""":type root: TreeNode:rtype: int"""# 利用完全二叉树if not root:return 0# 判断是满二叉树直接输出leftnode = root.leftrightnode = root.rightleft_depth, right_depth = 0, 0while leftnode:leftnode = leftnode.leftleft_depth += 1while rightnode:rightnode = rightnode.rightright_depth += 1if left_depth == right_depth:return (2 << left_depth) - 1  # 2 << 1 = 2 ^ 2# 普通二叉树正常递归输出return self.countNodes(root.left) + self.countNodes(root.right) + 1

第16天完结🎉

http://www.hengruixuexiao.com/news/46575.html

相关文章:

  • 怎样做网站认证网络营销的基本方法
  • 建网站义乌唯尚广告联盟app下载
  • 服务品牌策划方案廊坊seo网站管理
  • 优购物官方网站直播成都网站建设企业
  • 网站正在建设中php百度推广托管公司
  • 北辰网站开发seo推广软件费用
  • 顺德微网站建设河北seo基础
  • 中建招聘2022社会招聘信息优化网站的步骤
  • 阳江网站建设推广公司电话奶茶网络营销策划方案
  • 南昌网站建设赣icp南昌深圳优化公司样高粱seo
  • 陕西企业营销型网站建设论坛如何做seo
  • 做网站可以用微软雅黑字体么百度收录入口在哪里
  • 中国建设银行网站运营模式seo用什么论坛引流
  • 天河区网站建设整站多关键词优化
  • 嘉兴网络公司变更杭州seo靠谱
  • 网页制作分工明细武汉seo搜索引擎优化
  • 潍坊做网站建设的公司现在推广什么app最挣钱
  • 江西锐安建设工程有限公司网站营销型网站建站
  • 专门做二维码的网站今日疫情最新数据
  • 海南网站建设粤icp备乐云seo
  • 阿里云备案网站是空的window优化大师官网
  • icp备案网站名称新网店怎么免费推广
  • 绍兴专业网站建设sem竞价代运营
  • wordpress 双语言保定seo建站
  • 直播系统开发公司seo搜索引擎优化薪资水平
  • 大连建网站短视频矩阵seo系统源码
  • 新手怎么做电商在哪个网站永久观看不收费的直播
  • 网站建设公司创业计划书百度公司电话热线电话
  • 竖排导航网站爱站网为什么不能用了
  • 自助建站广告发布百度seo视频教程