力扣——算法入门计划第八天

简介: 力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。

 目录

🍕题目

🍔DFS深度优先搜索

总体思路

🍟代码

🍕题目

🍔方法一:层层遍历

🍟代码


🍕题目

617. 合并二叉树

image.png

🍔DFS深度优先搜索

总体思路

可以使用深度优先搜索合并两个二叉树。

从根节点开始同时遍历两个二叉树,不断向下搜索直达最后,并将对应的节点进行合并。

两个二叉树的对应节点可能存在以下三种情况,对于每种情况使用不同的合并方式。

1)如果两个二叉树的对应节点都为空,

则合并后的二叉树的对应节点也为空;

2)如果两个二叉树的对应节点只有一个为空,

则合并后的二叉树的对应节点为其中的非空节点;

3)如果两个二叉树的对应节点都不为空,

则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要合并两个节点(就是对应值相加)。

🍟代码

# 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 mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
        if not t1:
            return t2
        if not t2:
            return t1
        merged = TreeNode(t1.val + t2.val)
        merged.left = self.mergeTrees(t1.left, t2.left)
        merged.right = self.mergeTrees(t1.right, t2.right)
        return merged

image.gif

image.png

🍕题目

116. 填充每个节点的下一个右侧节点指针

image.png

image.gifimage.png

🍔方法一:层层遍历

题目让我们将二叉树的每一层节点都连接起来形成一个链表。

因此直观的做法我们可以对二叉树进行层遍历,

在层遍历的过程中将我们将二叉树每一层的节点拿出来遍历并连接。

有点类似与广度优先遍历

下面是动态演示

https://ucc.alicdn.com/images/user-upload-01/a09cff24a4874dc8a9dc43d7a22b4f79.gif

🍟代码

详细见代码

"""
# Definition for a Node.
class Node:
    def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
"""
import collections 
class Solution:
    def connect(self, root: 'Node') -> 'Node':
        if not root:    #没有根节点就返回无
            return root
        # 初始化队列同时将第一层节点加入队列中,即根节点
        Q = collections.deque([root])
        # 外层的 while 循环迭代的是层数
        while Q:
            # 记录当前队列大小
            size = len(Q)
            # 遍历这一层的所有节点
            for i in range(size):
                # 从队首取出元素
                node = Q.popleft()
                # 连接
                if i < size - 1:
                    node.next = Q[0]
                # 拓展下一层节点
                if node.left:
                    Q.append(node.left)
                if node.right:
                    Q.append(node.right)
        # 返回根节点
        return root

image.gif


相关文章
牛客刷题之数学基础-快速幂
牛客刷题之数学基础-快速幂
69 0
|
算法
第四天_双指针【算法入门】
第四天_双指针【算法入门】
47 0
|
算法
代码随想录算法训练营第二十四天 | LeetCode 77.组合
代码随想录算法训练营第二十四天 | LeetCode 77.组合
108 0
|
存储 算法 程序员
力扣——算法入门计划第七天
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。
力扣——算法入门计划第七天
|
算法 程序员
力扣——算法入门计划第十天
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。
力扣——算法入门计划第十天
|
算法 搜索推荐 C++
C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)(1)
C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)(1)
357 0
C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)(1)
|
算法 编译器 C++
C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)(2)
C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)(2)
244 0
C++模板 —— 万字带你了解C++模板(蓝桥杯算法比赛必备知识STL基础)(2)
|
算法
代码随想录算法训练营第八天 | 字符串
代码随想录算法训练营第八天 | 字符串
98 0
|
存储 算法 Java
算法学习入门Day1_Leetcode_70 爬楼梯 ~还是辣么滴丝滑 雀氏润
算法学习入门Day1_Leetcode_70 爬楼梯 ~还是辣么滴丝滑 雀氏润
算法学习入门Day1_Leetcode_70 爬楼梯 ~还是辣么滴丝滑 雀氏润
|
算法 程序员
力扣——算法入门计划第八天
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。 此外,力扣(LeetCode)致力于解决程序员技术评估、培训、职业匹配的痛点,逐步引领互联网技术求职和招聘迈向专业化。
力扣——算法入门计划第八天