自学内容网 自学内容网

Day 15 卡玛笔记

这是基于代码随想录的每日打卡

222. 完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。

完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(从第 0 层开始),则该层包含 1~ 2h 个节点。

示例 1:

img

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

示例 2:

输入:root = []
输出:0

示例 3:

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

递归法

# 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 countNodes(self, root: Optional[TreeNode]) -> int:
        if root==None:
            return 0
        def count_node(node):
            # 终止条件:节点为None返回0
            if node==None:
                return 0
            # 处理单层逻辑
            leftnum=count_node(node.left)# 左孩子数量
            rightnum=count_node(node.right)# 右孩子数量
            return 1+leftnum+rightnum
        return count_node(root)

运行结果

在这里插入图片描述



110. 平衡二叉树

给定一个二叉树,判断它是否是平衡二叉树

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:true

示例 2:

img

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

示例 3:

输入:root = []
输出:true

递归法

# 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 isBalanced(self, root: Optional[TreeNode]) -> bool:
        def getHeight(node):
            # 递归终止条件
            if node==None:
                return 0

            # 单层逻辑
            # 左子树高度
            left=getHeight(node.left)
            # 如果左子树返回-1,则当层直接返回-1
            if left==-1:
                return -1
            # 右子树高度
            right=getHeight(node.right)
            # 如果右子树返回-1,则当层直接返回-1
            if right==-1:
                return -1
            # 如果左右子树都符合条件,计算整体是否符合条件
            if abs(left-right)>1:
                # 如果不符合条件返回给上层-1
                return -1
            else:
                # 如果符合条件,则返回当前节点高度给上一层
                return 1+max(left,right)
        
        res=getHeight(root)
        if res!=-1:
            return True
        else:
            return False

运行结果

在这里插入图片描述



404. 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

img

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

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

递归法

# 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 sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
        def Count(node):
            # 递归终止条件
            if node==None:
                return 0

            # 处理单层逻辑
            # 计算左子树的左叶子之和
            if node.left!=None and node.left.left==None and node.left.right==None:
                leftvalue=node.left.val
            else:
                leftvalue=Count(node.left)
            # 计算右子树的左叶子之和
            rightvalue=Count(node.right)
            return leftvalue+rightvalue
        return Count(root)

运行结果

在这里插入图片描述



257. 二叉树的所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

示例 1:

img

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:

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

递归法

# 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 binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        res=[]
        path=[]
        def traversal(node,res,path):
            # 终止条件
            # 当走到叶子节点时就是终点了
            if node.left==None and node.right==None:
                path.append(node.val)
                res.append('->'.join(map(str,path)))
                return

            # 递归逻辑
            path.append(node.val)

            if node.left:
                traversal(node.left,res,path)
                # 回溯
                path.pop()
            if node.right:
                traversal(node.right,res,path)
                # 回溯
                path.pop()
        traversal(root,res,path)
        return res

运行结果

在这里插入图片描述

有问题欢迎评论或私信


原文地址:https://blog.csdn.net/2301_82051744/article/details/145311846

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!