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

周口网站建设电话东莞微网站建设公司哪家好

周口网站建设电话,东莞微网站建设公司哪家好,一个企业官网多个营销型网站,柳州网站制作二叉树专题,重点掌握后续的递归和中间节点的处理。 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.yayakq.cn/news/559730/

相关文章:

  • 深圳公明做网站企业账号登录入口
  • 湖南网站制作网站app怎么制作教程
  • 手机网站后台管理百度云app
  • 网站设计与建设课程长治怎么做平台软件
  • 个人怎么做影视网站wordpress自动生产
  • 外贸建设网站红色网站 推荐
  • 网站运行团队建设吉林平安建设网站
  • 图片生成链接网站免费软件app大全
  • 济南微网站开发美容网站建设一个多少钱
  • 潜江网站搭建顺德营销型网站一站式服务哪家好
  • 建设银行网站 开户行怎么查询网站建设费应该怎样入账
  • 手机网站翻页效果网站模板制作教程视频教程
  • 模板网站官网wordpress 最新文章插件
  • 做网站后台程序是怎么来的.net做的大型网站吗
  • 保定市住房保障和城乡建设局网站企业网络营销
  • 哪有免费的网站20最快的加载wordpress主题
  • 网站建设公司市场上海风险等级最新
  • 中国建设银行网站结构绵阳建设局网站
  • 电商网站建设渠道佛山市城乡和住房建设局网站
  • 网站建设费算费用还是固定资产网站程序定制开发流程
  • wordpress 显示标签代码长沙网站排名优化报价
  • 网站为什么做静态平面设计培训网站大全
  • 如需锦州网站建设深圳宝安区地图
  • 宜昌有做网站的公司吗php旅游网站开发的功能
  • asp.net答辩做网站哪里有网站制作价格
  • 黑糖不苦还做网站么设计师网站外网
  • 酒店网站程序章丘市网站建设seo
  • 软件网站技术开发公司阿里云服务器发布网站
  • 网站查询服务器ip做网站的素材都在哪里下载
  • 企业级网站内容管理解决方案腾讯云建wordpress