树
文章平均质量分 91
LeetCode树题
zhangcoder
KEEP CODING! 文章的配套资料 http://zhangcoder.ysepan.com/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CD72【C++ Dev】二叉树的三种非递归遍历方式
总结了二叉树三种非递归遍历的实现方法:前序、中序和后序遍历。 前序遍历:通过栈保存左路节点,访问后处理右子树。访问顺序为根-左-右,代码使用双重循环实现。 中序遍历:类似前序,但访问节点时机改为从栈弹出时(左子树已处理完)。访问顺序为左-根-右。 后序遍历:需要区分首次/二次访问节点。提出三种方法: 利用内存填充字节标记访问状态(依赖64位架构) 使用prev变量记录前驱节点判断访问状态 使用辅助标记栈记录节点访问状态 三种遍历都通过栈管理节点访问顺序,时间复杂度O(n)。后序实现最复杂,需特殊处理节点原创 2025-08-29 20:46:34 · 726 阅读 · 0 评论 -
CD71.【C++ Dev】二叉树练习题3 (从前序与中序遍历序列构造二叉树、从中序与后序遍历序列构造二叉树)
介绍如何利用前序/中序和后序/中序遍历序列构造二叉树。通过分析前序确定根节点、中序确定左右子树区间的特点,给出了相应的递归算法实现。对于后序/中序情况,则后序确定根节点、中序确定子树区间,需注意递归顺序应为先右后左。两种方法的时间复杂度均为O(n),空间复杂度为O(n)。代码实现中都使用了索引标记当前处理的元素位置,并通过递归方式构建完整二叉树。原创 2025-08-23 09:12:07 · 1102 阅读 · 0 评论 -
CD70.【C++ Dev】二叉树练习题3 (二叉搜索树与双向链表)
摘要:本文介绍了将二叉搜索树转换为排序双向链表的两种方法。方法1通过新建双向链表,使用中序遍历将节点按序插入,需注意处理哨兵节点。方法2直接在原树上操作,利用中序遍历修改节点指针,使用prev指针记录前驱节点,最终返回链表头节点。两种方法均满足空间复杂度O(1)和时间复杂度O(n)的要求,其中方法2更符合题目要求,无需创建新节点。原创 2025-08-22 08:49:01 · 724 阅读 · 0 评论 -
CD69.【C++ Dev】二叉树练习题2 (二叉树和二叉搜索树的最近公共祖先)
探讨二叉搜索树和普通二叉树中寻找最近公共祖先(LCA)的两种方法。对于二叉搜索树,利用其有序特性,通过路径比较法找到LCA;对于普通二叉树,提出两种解法:1)使用前序遍历存储路径后比较;2)递归判断节点位置关系。两种方法均通过LeetCode测试,其中递归法更简洁高效。关键点在于处理节点分布在不同子树或同一子树的情况,以及正确返回递归结果。代码实现展示了如何将链表相交思想应用于树结构问题求解。原创 2025-08-16 10:46:14 · 1151 阅读 · 0 评论 -
CD68.【C++ Dev】二叉树练习题1 (从离散数学的命题来理解根据二叉树创建字符串题)
探讨如何根据二叉树前序遍历生成带括号的字符串表示。通过分析括号生成逻辑,发现需要处理四种情况:左右子树都存在、仅左子树存在、仅右子树存在、都不存在。初始方案采用四个if判断,但存在冗余。利用离散数学中的命题逻辑,将条件简化为两个关键判断:当左或右子树存在时添加左括号,仅当右子树存在时添加右括号。最终方案代码简洁高效,成功通过测试用例,验证了逻辑推导的正确性。该解法展示了如何将数学思维应用于算法优化,提升代码可读性和执行效率。原创 2025-08-15 11:03:20 · 905 阅读 · 0 评论 -
L19.【LeetCode笔记】另一棵树的子树
给你两棵二叉树root和subRoot。检验root中是否包含和subRoot具有相同结构和节点值的子树。如果存在,返回true;否则,返回false。二叉树tree的一棵子树包括tree的某个节点和这个节点的所有后代节点。tree也可以看做它自身的一棵子树。原创 2024-12-04 19:52:26 · 1387 阅读 · 0 评论 -
L18.【LeetCode题解】中序遍历和后序遍历
递归算法很简单,你可以通过迭代算法完成吗?递归算法很简单,你可以通过迭代算法完成吗?文章的代码修改遍历的顺序即可。文章的代码修改遍历的顺序即可。给定一个二叉树的根节点。和前序遍历类似,只需要对。给你一棵二叉树的根节点。和前序遍历类似,只需要对。原创 2024-12-04 09:56:49 · 455 阅读 · 0 评论 -
L17.【LeetCode题解】前序遍历
在int* preorderTraversal(struct TreeNode* root, int* returnSize)传了一个int*类型的参数returnSize,方案1.LeetCode给出了提示"树中节点数目在范围 [0, 100] 内",因此可以一次性开辟足够的空间。文章有所不同,LeetCode函数的返回值为int*,即返回一个不带NULL的int数组。由于形参的改变不影响实参,因此需要传returnSize的地址,因此为int*类型的参数。文章的PreOrder函数的代码。原创 2024-12-03 15:07:23 · 1470 阅读 · 1 评论 -
L16.【LeetCode题解】相同的树
比较p->val和q->val是否相同注意:写成if (p->val==q->val)没有什么意义,做不了任何事,判断如果不相等则返回false,否则递归比较左右子树的节点if (p->val!=q->val)//执行到此处,说明p->val和q->val相等。原创 2024-12-02 10:31:33 · 614 阅读 · 0 评论 -
L15.【LeetCode笔记】单值二叉树
如果左节点为NULL或右节点为NULL,不进行操作(原因是不违反规则),执行isUnivalTree(root->left)和isUnivalTree(root->right)让根节点和其左右子树的节点的val比较,左右子树的节点的val比较又和其左右子树的节点的val比较……给了根节点root,需要判断左节点的值和右节点的值(前提左右节点不为NULL)★★返回值的写法:左节点和右节点的值只要有一个不等于val,就返回false。备注:不和整个二叉树的根节点比较,而是和对应的左右子树的根节点比较,利用。原创 2024-11-30 15:24:02 · 1032 阅读 · 0 评论
分享