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

简介: 力扣(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


相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
38 0
|
16天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
1月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
27 2
|
1月前
|
算法
【链表】算法题(二) ----- 力扣/牛客
【链表】算法题(二) ----- 力扣/牛客
|
1月前
|
机器学习/深度学习 算法
机器学习入门(三):K近邻算法原理 | KNN算法原理
机器学习入门(三):K近邻算法原理 | KNN算法原理
|
1月前
|
机器学习/深度学习 算法 大数据
机器学习入门:梯度下降算法(下)
机器学习入门:梯度下降算法(下)
|
1月前
|
机器学习/深度学习 算法 API
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
|
1月前
|
算法
【链表】算法题(一) ----- 力扣 / 牛客
【链表】算法题(一) ----- 力扣 / 牛客
|
1月前
|
算法
【顺序表】算法题 --- 力扣
【顺序表】算法题 --- 力扣
|
1月前
|
机器学习/深度学习 算法
机器学习入门:梯度下降算法(上)
机器学习入门:梯度下降算法(上)
下一篇
无影云桌面