2025年7月14日
摘要:
题目描述 解法一:递归 寻找树的最底层以及最左侧的节点,我们应该关注的实际上是两个点:第一,最底层,也即我们应该要能够维护深度,这样才能确保取得最底层的节点;第二,最左侧,也即最底层的最先出现的节点,所以我们在遍历时只需要更新每一层遇到的第一个节点。具体的代码如下。 void traversal(T
阅读全文
posted @ 2025-07-14 09:27
sakura430
阅读(5)
推荐(0)
2025年6月27日
摘要:
题目描述 思路:递归 求解左叶子之和,我们可以采用中序的方式进行递归,过程中我们只采集左叶子的值,其它的部分只是访问但不收集,整体代码如下。 void traversal(TreeNode *cur,int & res){ if(cur == nullptr) return; if(cur -> l
阅读全文
posted @ 2025-06-27 09:33
sakura430
阅读(6)
推荐(0)
2025年6月25日
摘要:
题目描述 思路:前序递归+回溯 要搜寻二叉树的所有路径,依然绕不开递归算法,此时要注意的是在判断一条路径是否已经到达终点(即是否搜寻到了叶节点)的过程中,我们应该在判断叶节点之前收集叶节点保存的值,否则会跳过叶节点值的收集,导致漏值。同时,在搜寻到尾部之后,需要不断的回溯回到相对的根节点,方便再次搜
阅读全文
posted @ 2025-06-25 09:57
sakura430
阅读(9)
推荐(0)
2025年6月19日
摘要:
题目描述 解法:递归 二叉树问题大部分离不开递归,本题也一样。对于判断一棵树是否为平衡二叉树,我们要从平衡二叉树的定义的出发。一棵任意一部分子树的左右子树的度的差值的绝对值小于等于1,则它是一棵平衡二叉树。本题我们还是利用后序遍历,这样我们可以由底部向上搜寻获取高度(前序遍历是获得深度的概念),而在
阅读全文
posted @ 2025-06-19 17:54
sakura430
阅读(10)
推荐(0)
2025年6月18日
摘要:
题目描述 解法1:普通二叉树解法 完全二叉树它也是二叉树,所以我们可以采用二叉树求总的节点数的通法,采用后序遍历的方式,即可求解。这里采用后序而非前序遍历与中序遍历的原因是因为这两种遍历方式会二次访问根节点,在统计节点时更加复杂。具体的代码如下。 public: int inorderTravers
阅读全文
posted @ 2025-06-18 08:44
sakura430
阅读(10)
推荐(0)
2025年6月16日
摘要:
题目描述 解法1:递归 要求出二叉树的最小深度通过递归方法实际上与求最大深度的方式大差不差,但是在求最小深度时要注意一种情况,即二叉树是单侧树时的的最小深度,根据题干的定义,二叉树的最小深度是根节点至距离其路径最短的叶子节点的距离,但是单侧树的另一侧不存在叶子节点,所以若只是简单的将递归求解最大深度
阅读全文
posted @ 2025-06-16 19:46
sakura430
阅读(12)
推荐(0)
摘要:
题目描述 解法1:递归 我们可以采用递归的方式求解这道题,由于要求解最大深度,我们的策略应该是让由根节点出发的后序遍历(这样的话可以避免对于根节点的二次访问),随后当递归到结尾时返回每一小层次的左右侧深度的比较,通过不断地叠加最后得到最大深度。具体的代码如下。 int maxDepth(TreeNo
阅读全文
posted @ 2025-06-16 14:22
sakura430
阅读(14)
推荐(0)
2025年6月14日
摘要:
题目描述 思路,递归 判断一棵二叉树是不是对称二叉树,我们可以采取一种递归地方式来解决这个问题。首先,我们应该要判断出多种边界条件下的情况来否定二叉树是对称的,共三种: 1.当前指向的内侧存在而外侧不存在 2.当前指向的外侧存在而内侧不存在 3.当前指向的内外都存在但是二者的节点值并不相同。 由以上
阅读全文
posted @ 2025-06-14 08:57
sakura430
阅读(6)
推荐(0)
2025年6月11日
摘要:
题目描述 思路:递归 翻转二叉树可采用递归的方式解决,通过不断地遍历每一个节点,对其左右子树进行翻转达到一个二叉树的整体的翻转。但这里要注意的是,遍历的顺序应该采取前序或后序,而非中序,因为中序会导致对当前子树根节点的重复访问从而致使二叉树的翻转失败。具体代码如下。 TreeNode* invert
阅读全文
posted @ 2025-06-11 08:49
sakura430
阅读(13)
推荐(0)
2025年6月10日
摘要:
题目描述 思路:队列 二叉树的层序遍历是二叉树遍历的经典问题,我们在对二叉树进行层序遍历时,队列的使用是非常合适的。我们记录每一层的节点个数,这样当出队时我们就可以知道上一层的节点是否出队完毕,而上一层的节点出队的同时,我们使这个节点的左右孩子加入到队列中,以此循环直到队列为空,将用以收集的二维数组
阅读全文
posted @ 2025-06-10 23:05
sakura430
阅读(7)
推荐(0)