二叉树
princey2100
这个作者很懒,什么都没留下…
展开
-
Leetcode 538. 把二叉搜索树转换为累加树 Convert BST to Greater Tree - Python 递归法 二叉树部分总结
又因为这是一棵平衡二叉树所以是有序的,若想从后向前由大到小累加,则需要逆中序遍历(右中左,普通后续遍历是:左中右);需要pre全局变量,来记录之前元素之和;需要cur局部变量指向当前遍历元素;可以讲此题看为有序数组去理解:将数组从后往前不断累加;原创 2023-01-25 14:15:43 · 117 阅读 · 0 评论 -
Leetcode 108. 将有序数组转换为二叉搜索树 Convert Sorted Array to Binary Search Tree - Python 递归法
若直接 mid = (left + right) / 2 , 则有可能因left和right的值都接近infinite而发生计算错误。注意计算数组中间元素下标,mid = left + (right-left) // 2。注意递归结束条件非常重要:if left>right: return None。依次用nums[mid]左边和右边数组,构建root的左子树、右子树;找到数组中间元素nums[mid],并将其作为树的根结点root;当数组左索引>右索引,则意味着数组中的元素都以放入二叉树中。原创 2023-01-25 13:08:16 · 120 阅读 · 0 评论 -
Leetcode 669. 修剪二叉搜索树 Trim a Binary Search Tree - Python 以递归法解题
【代码】669. 修剪二叉搜索树 Trim a Binary Search Tree - Python 以递归法解题。原创 2023-01-24 11:04:50 · 79 阅读 · 0 评论 -
Leetcode236. 二叉树的最近公共祖先 Lowest Common Ancestor of a Binary Tree - Python 递归法
1.当当前root==p or root == q 就将root返回,当同一层递归逻辑里的left 和 right都不为空时,说明当前root为所求lowest common ancestor;2.若只有left空或只有right空,则返回非空的。因为非空的即为所求,是从底层一直回溯上来的;3.若left和right都为空,则返回空。可能为叶子几点或该树的分叉不满足条件;原创 2022-12-09 17:28:10 · 827 阅读 · 0 评论 -
Leetcode530. 二叉搜索树的最小绝对差 Minimum Absolute Difference in BST - Python 递归法
思路:1.中序遍历二叉搜索树得到的为一个有序数组,可利用此特性求Minimum Absolute Difference。2.一个有数数组两两之间数值间隔最小,所以只需比较两两之间的差值大小。递归法:递归法(边中序遍历边计算):原创 2022-12-08 13:36:04 · 302 阅读 · 0 评论 -
Leetcode98. 验证二叉搜索树 Validate Binary Search Tree - Python 递归法/迭代法
思路:二叉搜索树中序遍历结果是一个有序数组。利用此特性,可判断是否是一个正确的二叉搜索树。递归法:递归法(常规法:一边中序遍历,一边检查是否是有序):虽然但是,如果测试数据中有-float("INF"),而cur_max也等于-float("INF"),就无法比较各节点之间的大小了。所以需要新方法,用一个pre变量记录下前一个root.val,将最底层最左边的节点作为第一个赋值给pre的root:原创 2022-12-08 12:59:33 · 167 阅读 · 0 评论 -
Leetcode700. 二叉搜索树中的搜索 Search in a Binary Search Tree - Python 递归法/迭代法
二叉搜索树的特点:左子树的所有节点值 都比 root.val小右子树的所有节点值 都比 root.val大可利用此特性写code:递归法迭代法:原创 2022-12-06 22:55:03 · 179 阅读 · 0 评论 -
Leetcode617. 合并二叉树 Merge Two Binary Trees - Python 递归法
1.若遇到root1非空,root2空,则把root1当前的根节点全都给到新树的对应根节点上。原创 2022-11-26 00:18:17 · 381 阅读 · 0 评论 -
Leetcode654. 最大二叉树 Maximum Binary Tree - Python 递归法
4.root.left 和 root.right 分别接着左右生成好的子树。3.将nums用索引分成左右两部分,分别递归传入递归函数;2.将最大值赋值给root.val;1.找出nums中最大值及其索引;原创 2022-11-25 22:00:53 · 211 阅读 · 0 评论 -
Leetcode.105. 从前序与中序遍历序列构造二叉树 Construct Binary Tree from Preorder and Inorder Traversal - Python 递归法
此题请参考Leetcode106。原创 2022-11-12 12:43:43 · 171 阅读 · 0 评论 -
Leetcode.106 从中序与后序遍历序列构造二叉树 Construct Binary Tree from Inorder and Postorder Traversal - Python 递归法
root作为根节点所引导的二叉树,在各层递归函数不断地return的过程中,不断“羽翼丰满“,直到最后构建成一颗完整的二叉树。6.将划分好的inorder_right postorder_right 传入递归函数,重复1-4;5.将划分好的inorder_left postorder_left 传入递归函数,重复1-4;2.用此根节点构建一颗新二叉树,用作root.val,并用其划分中序序列的左子树与右子树;1.后序序列的最后一个元素为二叉树的根结点;4.以3特点划分后序遍历的左子树与右子树;原创 2022-11-12 12:17:19 · 104 阅读 · 0 评论 -
Leetcode113.路径总和II Path Sum II - Python 递归法
前者只是将res指针放入result中,这样的话,随着res在递归深入回溯的过程中不断变化,result数组的元素也会不断变化。三行是并列的,可以放在主函数pathSum中并列运行,在isornot()中可以调用local variable result,所以不需要单独创建self.result。1.result.append(res) 与 result.append(res[:])的功能是不同的。2.需要在终止条件处,添加result.append(res[:])逻辑。此题与112题相似。原创 2022-11-11 13:54:48 · 299 阅读 · 0 评论 -
Leetcode112. 路径总和 Path Sum - Python 递归法
4.递归结束条件:判断到叶子节点时,targetSum是否为0;1.注意targetsum的用法:每经过一个节点,就将其减去当前经过的节点值,如此到根节点,就正好为0。if isornot(): return true 会一层一层向上返回true,直到第一层递归。2.targetSum - root.left.val 中隐藏着回溯思想。3.递归函数参数为root、targetSum & 返回值为bool。5.单层递归逻辑:若root左右孩子不为空,则依次继续递归。原创 2022-11-11 11:47:26 · 261 阅读 · 0 评论 -
Leetcode513. 找树左下角的值 Find Bottom Left Tree Value - python 递归、迭代法
记录当前叶子节点值,因为这是最深最左的叶子节点(最左是怎么来的?3.最后一层只有一个光杆司令 右 叶子节点,则取得是右光杆司令,不过题目的cases应该没有这种情况所以排除。层序遍历,for循环遍历queue队列中树最后一层叶子节点,就会得到最后一层。2.最后一层只有一个光杆司令 左 叶子节点,则取的是这个左光杆司令。2.递归停止条件,当遍历到叶子节点时,停止。当在本层调用下层递归时,需要先将本层depth+1,再传给下层;1.最后一层是满二叉树,全是叶子节点,则取最左边的。1.递归参数、返回值。原创 2022-10-16 15:43:56 · 420 阅读 · 0 评论 -
Leetcode404. 左叶子之和Sum of Left Leaves - Python 递归法
对每一个root都要如法炮制,这也是递归的核心思想所在;只有通过左叶子节点的父节点才能判断。本题难点在于,如何判断左叶子节点。1.求左子树的所有左叶子之和。2.求右子树的所有左叶子之和。3.求该root的左叶子。原创 2022-10-16 11:20:00 · 183 阅读 · 0 评论 -
Leetcode572. 另一棵树的子树 Subtree of Another Tree - Python 迭代法
2.若1不成立,subTree是否是root左子树的子树。3.若2不成立,subTree是否是root右子树的子树。2.root左子树 等于 subTree左子树。3.root右子树 等于 subTree右子树。1.root 是否等于 subTree。三者是 和 and 关系。三者是 或 or 关系。原创 2022-10-14 13:01:20 · 235 阅读 · 0 评论 -
Leetcode100. 相同的树 Same Tree - Python 递归法
此题与Leetcode101类似,只需改一下递归的单层逻辑。原创 2022-10-14 10:51:19 · 120 阅读 · 0 评论 -
Leetcode257. 二叉树的所有路径 Binary Tree Paths - Python递归法/回溯法
其中 self.traversal(root.left, path + '->' , result) 的 path + '->' 隐藏了回溯步骤。因为path是一个局部变量,本轮递归函数结束后,就分崩离析了,就回到上一层递归的残局了。返回值:无返回值,因为在遇到叶子节点时,就操作了result.append(path) result 已通过全局变量修改。因为一旦找到叶子节点就要处理逻辑了,即result.append(path)若非叶子节点,则将root.val加入path后,继续递归遍历左右子树。原创 2022-10-13 23:31:15 · 290 阅读 · 0 评论 -
Leetcode110. 平衡二叉树 Balanced Binary Tree - Python 递归法
依次计算根节点左右子树的高度,以判断该根节点所引导的树是否符合高度平衡树。2.只要有一个树不满足条件,则层层往上返回-1(非高度平衡树);1.先求左右子树高度,再用此高度判断是否为高度平衡树;3.只要有一个子树不满足条件,返回了-1,则全盘皆输。就这样一层一层左右子树去遍历。原创 2022-10-13 18:22:08 · 220 阅读 · 0 评论 -
Leetcode222. 完全二叉树的节点个数 Count Complete Tree Nodes - Python 迭代法、递归法
2.若不满足满二叉树,则如法炮制,分而治之:依次计算该节点的左右子树的节点数。若为满二叉树则用公式,否则继续如法炮制。2.递归结束条件,判断根节点所在树是否为满二叉树(左子树与右子树深度是否相同)1.若该根节点所在树为满二叉树,则用公式2^层数=节点数 计算。3.单层递归逻辑:若不满足满二叉树,则继续如法炮制,分而治之。依次求左右子树节点个数法,递归法。依次计算根节点的左右孩子节点数。原创 2022-10-12 16:56:11 · 202 阅读 · 0 评论 -
Leetcode111. 二叉树的最小深度 Minimum Depth of Binary Tree - Python 递归法
注意此题与014.二叉树的最大深度相似,但不能直接吗max()改成min()最后一种,左右都空,会作为结束递归条件,返回0,不会到达上述逻辑判断这一步。什么是叶子节点,左右孩子都为空的节点才是叶子节点!所以在得到子树的深度后,需要判断一下,有如下情况。依次判断左右子树深度法,递归法。原创 2022-10-12 12:05:28 · 152 阅读 · 0 评论 -
Leetcode559. N 叉树的最大深度 Maximum Depth of N-ary Tree - Python 递归法
【代码】559. N 叉树的最大深度 Maximum Depth of N-ary Tree - Python 递归法。原创 2022-10-11 14:15:44 · 90 阅读 · 0 评论 -
Leetcode101. 对称二叉树 Symmetric Tree - Python 递归法
【代码】101. 对称二叉树 Symmetric Tree - Python 递归法。原创 2022-10-11 12:15:18 · 157 阅读 · 0 评论 -
Leetcode590. N 叉树的后序遍历 N-ary Tree Postorder Traversal - Python 迭代法
注意需要依次遍历所有孩子节点,孩子位置。原创 2022-10-10 23:40:33 · 87 阅读 · 0 评论 -
Leetcode589. N 叉树的前序遍历 N-ary Tree Preorder Traversal - Python 迭代法
注意需要依次遍历孩子节点。原创 2022-10-10 23:36:28 · 72 阅读 · 0 评论 -
Leetcode226. 翻转二叉树 Invert Binary Tree - Python - 迭代法层序遍历法
1.注意这是层序遍历;(也可用前序和后续遍历)其它与迭代层序遍历一样。2.除了# 关键一步。原创 2022-09-24 23:31:22 · 181 阅读 · 0 评论 -
Leetcode111. 二叉树的最小深度 Minimum Depth of Binary Tree - Python 以迭代法解题
这一步最重要 只需要:若判断左孩子和右孩子同时为空时,则返回当前depth。其它和层序遍历二叉树思路一致。原创 2022-09-24 22:39:01 · 147 阅读 · 0 评论 -
Leetcode104. 二叉树的最大深度 Maximum Depth of Binary Tree - Python 以迭代/递归法解题
注意全局变量self.res的使用,以及depth+1 因为深度和depth始终差1。同迭代层序遍历二叉树。原创 2022-09-24 17:48:06 · 132 阅读 · 0 评论 -
Leetcode117. 填充每个节点的下一个右侧节点指针 II Populating Next Right Pointers in Each Node II - Python 以迭代法解题
同Leetcode116。原创 2022-09-24 17:29:41 · 88 阅读 · 0 评论 -
Leetcode116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node - Python 以迭代法解题
遍历到每行非最后节点时,将cur.next指向queue[0], 注意这一步不能queue.popleft,否则就把下一层待遍历的孩子节点给弹出了。在遍历到每行最后一个节点时,break;把result和results都去掉;原创 2022-09-24 16:55:54 · 78 阅读 · 0 评论 -
Leedcode515.在每个树行中找最大值 Find Largest Value in Each Tree Row - Python 以迭代/递归法实现
【代码】Leedcode515.在每个树行中找最大值 Find Largest Value in Each Tree Row - Python 以迭代/递归法实现。原创 2022-09-24 16:09:35 · 92 阅读 · 0 评论 -
Leetcode429. N叉数的层序遍历 N-ray Tree Level Order Traversal - Python 以迭代法实现
2.将该层各根节点的孩子们,依次入deque,供下一轮while里的for遍历;与二叉树层序遍历不同的是,这里的孩子节点是由Node节点以列表的形式保存的。3.依次遍历在上一层加入到deque的孩子们;原创 2022-09-24 15:54:44 · 136 阅读 · 0 评论 -
Leetcode637. 二叉树的层平均值 Average of Levels in Binary Tree - Python 以递归/迭代算法实现
很简单,就等于层序遍历二叉树。原创 2022-09-24 14:45:21 · 677 阅读 · 0 评论 -
Leetcode199. 二叉树的右视图 Binary Tree Right Side View - Python 以递归/迭代算法实现
注意不要看到是右视图,就忽略遍历左孩子if root.left: traversal(root.left, depth + 1)。2.在for循环体里,依次将每个节点的左右孩子(下一层节点)加入到queue,待下一轮while用;当一个根节点没有右孩子时,左孩子也能被看到。如此,无需遍历每层非最右侧的子节点的值,节约了时间复杂度。本题就是考察二叉树的层序遍历而已,没什么难的。迭代法层序遍历二叉树。原创 2022-09-24 13:12:34 · 698 阅读 · 0 评论 -
Leetcode107. 二叉树的层序遍历 II Binary Tree Level Order Traversal II - Python 以递归/迭代算法实现
只需将resutlts数组颠倒顺序即可。只需将resutlts数组颠倒顺序即可。原创 2022-09-24 11:22:13 · 616 阅读 · 0 评论