LeetCode【二叉树】
文章平均质量分 55
xiaoshijiu333
farewell
展开
-
【LeetCode】路径总和 III(前缀和)
#LeetCode每日一题【二叉树专题】路径总和 IIIhttps://leetcode-cn.com/problems/path-sum-iii/分析解法1:二叉树中任意路径等于目标和,暴力解法,从二叉树的每一个节点向下寻找符合条件的路径,记录数目;再以同样的方式计算二叉树的所有其他的节点,即双重递归实现 int ans = 0; // 暴力搜索法:每个节点都去找有没有路径满足目标和 public int pathSum(TreeNode root, int target原创 2022-03-18 20:13:09 · 1000 阅读 · 0 评论 -
【LeetCode】递归时值传递、引用传递的注意
#LeetCode每日一题【二叉树专题】在java中基本类型都是值传递,而非基本类型都是引用传递;当其作为参数在递归过程中,需要注意分支污染问题,以及是否需要回溯的问题int作为参数传递因为int是值传递,每次递归调用方法都是传入一个值,递归调用结束之后,并不会影响原来的值,即不存在分支污染问题如:LeetCode104求根节点到叶节点数字之和 int ans = 0; public int sumNumbers(TreeNode root) { getSum(r原创 2022-02-28 20:09:28 · 1621 阅读 · 0 评论 -
【LeetCode】广度优先搜索之层次遍历通用解体模板
#LeetCode每日一题【二叉树专题】经常涉及到一些二叉树跟层数相关的题目,例如需要对树每一层的节点做些逻辑处理、求层数(高度)等,类似于这类题目,都可以使用广度优先搜索的层次遍历去实现,大致模板如下if (root == null) { return;}Deque<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) { // 当前队列元素全部出队原创 2022-02-28 19:28:14 · 476 阅读 · 0 评论 -
【LeetCode】路径总和 II(初窥递归+回溯)
#LeetCode每日一题【二叉树专题】路径总和 IIhttps://leetcode-cn.com/problems/path-sum-ii/分析寻找一颗二叉树中 所有 从根节点到叶子节点 路径总和等于给定目标和的路径考虑深度优先搜索,每当到达一个叶子节点的时候,判断当前值是不是满足目标和,满足即将其加入到最终结果集;需要注意的是,当某一个根节点及其下面都遍历完了之后,在继续往上,需要注意回溯,不然会影响下一次递归结果集实现 List<List<Integer>>原创 2022-02-18 17:57:13 · 222 阅读 · 0 评论 -
【LeetCode】平衡二叉树
#LeetCode每日一题【二叉树专题】平衡二叉树https://leetcode-cn.com/problems/balanced-binary-tree/分析平衡二叉树的定义:每个节点的左右两个子树的高度差的绝对值不超过 1,即满足平衡二叉树左右子树都是平衡二叉树,且左右子树的高度差绝对值不超过1;当求一棵树的高度时,使用dfs递归的时候,知道左右子树的高度的同时也是可以判断这棵树是否平衡,如果有一颗子树不平衡,则整棵树不平衡。实现public boolean isBalanced(原创 2022-02-14 17:09:35 · 334 阅读 · 0 评论 -
【LeetCode】从前序与中序遍历序列构造二叉树(不断优化)
#LeetCode每日一题【二叉树专题】从前序与中序遍历序列构造二叉树https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/分析前序:根——左——右中序:左——根——右前序的第一个元素肯定是根节点,在中序中,根节点左边的元素是左子树的所有元素,根节点右边的元素是右子树的所有元素,在前序序列中找到左子树、右子树的前序序列,在递归的处理左右子树即可实现 public原创 2022-02-14 14:57:06 · 198 阅读 · 0 评论 -
【LeetCode】恢复二叉搜索树
#LeetCode每日一题【二叉树专题】恢复二叉搜索树https://leetcode-cn.com/problems/recover-binary-search-tree/分析二叉搜索树一个重要的特性就是其中序遍历的结果是升序的,二叉搜索树被交换了两个节点,也就等同于升序数组中被交换了两个数。如何找到升序数组中被交换的两个数?假设一个数组 [1,2,3,4,5,6,7] 交换其中的,2、6为[1,6,3,4,5,2,7],其中第一次出现当前元素比后一个元素值大的时候定是出错的第一个位置(被交原创 2022-02-09 17:01:55 · 6494 阅读 · 0 评论 -
二叉树先序、中序、后序、层次遍历递归以及非递归算法实现
最近写了一下关于二叉树的三种遍历算法的递归以及非递归实现,以及层次遍历算法实现先序遍历递归实现 /** * 先序遍历,根》左》右 */ public void beforeTraverse(TreeNode root) { if (root == null) { return; } System...原创 2019-08-17 16:46:57 · 1970 阅读 · 0 评论 -
【LeetCode】相同的树+对称二叉树
#LeetCode每日一题【二叉树专题】相同的树https://leetcode-cn.com/problems/same-tree/分析判断两棵树是否相等,即根节点一样、左子树一样、右子树一样;左子树和右子树也是同样的处理方式,很明显是一个递归程序实现 // 相同的树:切分成子问题,根节点一样的情况下,比较左子树,在比较右子树,最后综合结果; // 递归不用考虑太多细节,只需考虑当前层级应该做啥::拿到左右子树的比较结果综合~~~ public boolean isSame原创 2022-02-08 16:19:04 · 6154 阅读 · 0 评论 -
【LeetCode】不同的二叉搜索树(递归——递归+记忆搜索优化——动态规划)
#LeetCode每日一题【二叉树专题】不同的二叉搜索树https://leetcode-cn.com/problems/unique-binary-search-trees/分析二叉搜索树,根节点的值大于左节点小于右节点,且他的每一颗子树都是二叉搜索树。所以确定根节点i之后,那左子树的值必然是是[1,i)之间,右子树的值必然是在(i,n]之间。即能切分成子问题:左子树的根节点值j在[1,i)中,其左子树的值必然是在[i,j),其右子树的值必然是在(j,i)…以此类推。即是一个递归问题,不断原创 2022-02-07 16:33:09 · 484 阅读 · 0 评论