12 2024 档案
摘要:问题描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 分析 树形DP,每次返回左
阅读全文
摘要:问题描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 分析 使用递归解决比较简单,但是不太好实现
阅读全文
摘要:问题描述 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 分析 暴力解法,枚举每个结点开始是否有符合题意的路
阅读全文
摘要:问题描述 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 分析 逻辑上,从前序遍历中依次从前往后获取根结点,从中序里获取根结点的序号后可以获取左子树和右子树,递归构建树即可。
阅读全文
摘要:问题描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 分析 注意,这里应该使用同样的TreeNode,也就是
阅读全文
摘要:问题描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 bfs树的层次遍历 同其他的一些题,使用for循环区分该层的结点,并记录每层的最后一个结点为答案即可。 class Solution { public: vector<int>
阅读全文
摘要:堆必须是完全二叉树 完全二叉树只允许树的最后一行不满,且最后一行必须从左到右排列,最后一行元素之间无间隔 大根堆:大的结点在顶 小根堆:小的结点在顶
阅读全文
摘要:问题描述 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 分析 已经给定BST,找出第k大的数字。 可以利用BST性质:中序遍历一定是升序数组,遍历到第k个结点即为答案,复杂度O(n) 注意,java中成员变量名与函数形参重名
阅读全文
摘要:问题描述 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 分析 可以使用递归解决。要注意结点的左子树中每个结点都要小于当
阅读全文
摘要:问题描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 分析 对于nullptr: 先判不空再入队 入队列后在for中判空,为空则continue 第一种更好,因为如果为空,即使continue也会影响全局,比如该题中res.push_back(
阅读全文
摘要:问题描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵平衡二叉搜索树。 分析 二叉查找树 Binary Search Tree,又叫:二叉搜索树,二叉排序树,其中序遍历是升序的,因此本题等同于根据中序遍历的序列恢复二叉搜索树 与二分有区别,二分是不断查找答案所在区域的
阅读全文