2025年6月18日
摘要:
题目描述 解法1:普通二叉树解法 完全二叉树它也是二叉树,所以我们可以采用二叉树求总的节点数的通法,采用后序遍历的方式,即可求解。这里采用后序而非前序遍历与中序遍历的原因是因为这两种遍历方式会二次访问根节点,在统计节点时更加复杂。具体的代码如下。 public: int inorderTravers
阅读全文
posted @ 2025-06-18 08:44
sakura430
阅读(2)
推荐(0)
2025年6月16日
摘要:
题目描述 解法1:递归 要求出二叉树的最小深度通过递归方法实际上与求最大深度的方式大差不差,但是在求最小深度时要注意一种情况,即二叉树是单侧树时的的最小深度,根据题干的定义,二叉树的最小深度是根节点至距离其路径最短的叶子节点的距离,但是单侧树的另一侧不存在叶子节点,所以若只是简单的将递归求解最大深度
阅读全文
posted @ 2025-06-16 19:46
sakura430
阅读(0)
推荐(0)
摘要:
题目描述 解法1:递归 我们可以采用递归的方式求解这道题,由于要求解最大深度,我们的策略应该是让由根节点出发的后序遍历(这样的话可以避免对于根节点的二次访问),随后当递归到结尾时返回每一小层次的左右侧深度的比较,通过不断地叠加最后得到最大深度。具体的代码如下。 int maxDepth(TreeNo
阅读全文
posted @ 2025-06-16 14:22
sakura430
阅读(0)
推荐(0)
2025年6月14日
摘要:
题目描述 思路,递归 判断一棵二叉树是不是对称二叉树,我们可以采取一种递归地方式来解决这个问题。首先,我们应该要判断出多种边界条件下的情况来否定二叉树是对称的,共三种: 1.当前指向的内侧存在而外侧不存在 2.当前指向的外侧存在而内侧不存在 3.当前指向的内外都存在但是二者的节点值并不相同。 由以上
阅读全文
posted @ 2025-06-14 08:57
sakura430
阅读(2)
推荐(0)
2025年6月11日
摘要:
题目描述 思路:递归 翻转二叉树可采用递归的方式解决,通过不断地遍历每一个节点,对其左右子树进行翻转达到一个二叉树的整体的翻转。但这里要注意的是,遍历的顺序应该采取前序或后序,而非中序,因为中序会导致对当前子树根节点的重复访问从而致使二叉树的翻转失败。具体代码如下。 TreeNode* invert
阅读全文
posted @ 2025-06-11 08:49
sakura430
阅读(6)
推荐(0)
2025年6月10日
摘要:
题目描述 思路:队列 二叉树的层序遍历是二叉树遍历的经典问题,我们在对二叉树进行层序遍历时,队列的使用是非常合适的。我们记录每一层的节点个数,这样当出队时我们就可以知道上一层的节点是否出队完毕,而上一层的节点出队的同时,我们使这个节点的左右孩子加入到队列中,以此循环直到队列为空,将用以收集的二维数组
阅读全文
posted @ 2025-06-10 23:05
sakura430
阅读(2)
推荐(0)
2025年6月8日
摘要:
题目描述 思路:栈 由于前序的序列为根左右,那么我们这里的操作就是先以右子树入栈,随后左子树入栈,这样根据栈的性质,出栈时就能得到左在前,右在后的效果,具体的代码实现如下. class Solution { public: vector<int> preorderTraversal(TreeNode
阅读全文
posted @ 2025-06-08 19:07
sakura430
阅读(2)
推荐(0)
2025年6月4日
摘要:
题目描述 代码实现 public: void traversal(TreeNode *cur , vector<int> &vec){ if(!cur) return; vec.push_back(cur->val); traversal(cur->left,vec); traversal(cur-
阅读全文
posted @ 2025-06-04 15:03
sakura430
阅读(3)
推荐(0)
2025年5月26日
摘要:
题目描述 思路:哈希表+优先级队列 对于这样的一个序列,要统计出现频率前k个的元素,我们自然要利用一种办法来将重复元素的出现次数与这个元素映射起来,而这样的需求正是哈希表的强项所在。所以在一开始,我们可以使用哈希表,通过遍历数组的方式将数组中出现过的数字以及它出现的频率收集起来。接下来要处理的就是如
阅读全文
posted @ 2025-05-26 14:36
sakura430
阅读(2)
推荐(0)
2025年5月24日
摘要:
题目描述 思路:单调队列 本题要获得滑动窗口的最大值,我们若是想用双指针暴力解法,在k较大以及数据量较大时会超时,时间复杂度为O(n*k),所以我们应该另寻他法。注意滑动窗口在每一轮循环中会将这一轮的第一个位置的元素抛出,然后在窗口尾部引入一个新的元素。那么我们应该这样考虑,每一轮更新强制性地将上一
阅读全文
posted @ 2025-05-24 09:19
sakura430
阅读(7)
推荐(0)