将有序数组转换为平衡二叉搜索树 将有序数组转换为二叉搜索树 1、题目 图1 2、题解 中序遍历 在给定中序遍历序列数组的情况下,每一个子树中的数字在数组中一定是连续的,因此可以通过数组下标范围确定子树包含的数字,下标范围为[left,right]。当\(left>rigth\)时,平衡二叉搜索树为空。 12345678910111213141516171819202122# Definition f 2024-04-09 Hot100 #实习
二叉树的层序遍历 二叉树的层序遍历 1、题目 图1 2、题解 广度优先搜索 借助数据结构队列,实现逐层打印 算法流程: 根节点为空时,返回空列表 初始化队列为根节点 当队列为空时跳出循环: 新建临时结果列表用于存储当前层结果和临时队列用于存储下一层结果 遍历队列,将结果存储临时结果列表,若当前节点的左(右)子节点不为空,则将临时节点加入临时队列 令队列等于临时队列 2024-04-09 Hot100 #实习
二叉树的直径 二叉树的直径 1、题目 图1 2、题解 深度优先搜索 递归计算当前节点的左右子树的路径,当前节点的直径值为\(max(左子树路径,右子树路径)+1\)。递归至树节点,该树的直径为左子树深度+右子树深度+1。 12345678910111213141516171819202122# Definition for a binary tree node.# class TreeN 2024-04-09 Hot100 #实习
对称二叉树 对称二叉树 1、题目 图1 2、题解 递归 终止条件:left和right不等或者left和right都为空 递归:比较\(left.left和right.right\)以及\(left.right和right.left\) 1234567891011121314151617181920212223# Definition for a binary tree node.# 2024-04-01 Hot100 #实习
翻转二叉树 翻转二叉树 1、题目 图1 2、题解 递归 根据二叉镜像树的定义,考虑\(DFS\)递归遍历二叉树。 算法流程: 终止条件:当节点root为空时,则返回None 递归: 初始化节点tmp,暂存root的左子节点 开始递归右子节点,并将返回值作为root的左子节点 开始递归左子节点,并将返回值作为root的右子节点 返回:当前节点root 123 2024-04-01 Hot100 #实习
二叉树最大深度 二叉树的最大深度 1、题目 图1 2、题解 树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS) 常见DFS:先序遍历、中序遍历、后序遍历 常见BFS:层序遍历 后序遍历(递归) 树的深度等于左子树深度和右子树深度最大值加1 算法流程: 终止:当root为空,表明越过叶节点,返回深度0 递归:计算root的左子树深度,即调用\(函数(r 2024-03-30 Hot100 #实习
二叉树中序遍历 二叉树中序遍历 1、题目 图1 2、题解 递归 不断先询问左子树,然后将根节点值加入答案,再询问右子树,直到节点为空结束。 123456789101112131415161718# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, rig 2024-03-30 Hot100 #实习
k个一组翻转链表 K个一组翻转链表 1、题目 图1 2、题解 局部反转链表 根据题目要求,我们可以将改问题分解成一个个局部反转链表。需要将链表节点按k个一组分组,使用一个指针head依次指向每组的头节点,该指针每次向前移动k步,直到结尾,对于每个分组,判断分组长度是否大于等于k,是则翻转,不是就不需要。 对于每一个子链表,除了翻转链表本身外,还需要将子链表的头部和上一个子链表尾部链接,将 2024-03-30 Hot100 #实习
LRU缓存机制 LRU缓存机制 1、题目 图1 2、题解 哈希表+双向链表 双向链表按照被使用的顺序存储键值对,靠近头部的键值为最近使用,靠近尾部的键值是最久未使用。 哈希表通过存储数据的键映射至双向链表的位置。 算法流程:首先使用哈希表进行定位,找出缓存项在双向链表中的位置,随后将其移动至双向链表头部。 对于get操作,首先判断key是否存在:若存在,则key对应节点为最近被 2024-03-29 Hot100 #实习
排序链表 排序链表 1、题目 图1 2、题解 归并排序(递归法) 当输入\(head.next ==None\)时,直接返回None 该方法有两个环节: 分割(快慢指针):找到当前链表中点,并从中点将链表断开。当\(head.next ==None\)时,说明只剩一个节点,直接返回该节点。 合并:将两个有序链表合并成一个有序列表。利用双指针进行合并:设立哨兵节点h作为头部,l 2024-03-29 Hot100 #实习