二叉树
冒 菜
这个作者很懒,什么都没留下…
展开
-
leecode 108. 将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树 本题仍然是数组转二叉树的一种题型,不过这题转二叉搜索树会更方便些,和最大二叉树是同一类题型,需要用一个方法放置数组,和左右边界的位置。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode()...原创 2022-03-01 10:17:05 · 138 阅读 · 0 评论 -
leecode 669. 修剪二叉搜索树
669. 修剪二叉搜索树 本题细节很多,需要重新回顾代码随想录-修剪二叉搜索树,代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = va...原创 2022-03-01 09:29:05 · 124 阅读 · 0 评论 -
leecode 450. 删除二叉搜索树中的节点
450. 删除二叉搜索树中的节点 本题是删除搜索树中的指定值,和添加值比,却复杂很多,但是本题的具体逻辑我竟然能自己慢慢实现出来,第一次感觉到对递归理解加深了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * ...原创 2022-02-28 20:29:14 · 126 阅读 · 0 评论 -
leecode 701. 二叉搜索树中的插入操作
701. 二叉搜索树中的插入操作本题是搜索树,需要用到条件,以下是迭代和递归两种做法:递归:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; }原创 2022-02-28 19:47:49 · 146 阅读 · 0 评论 -
leecode 235. 二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先本题是在leecode 236. 二叉树的最近公共祖先的基础上增加了一个条件:二叉搜索树。这样可以围绕搜索树改变思路。 第一种方法,仍然利用236题的思路可以求出来,但是没有用到条件。第二种方法,由于是搜索树,因此顺序是确定的,那么就可以不需要回溯,前中后三种遍历顺序也就都可以了。若当前节点值比p、q大,那么向左子树继续寻找,反之向右子树寻找。代码及优化如下:/** * Definition fo...原创 2022-02-28 18:48:55 · 198 阅读 · 0 评论 -
leecode 236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先代码随想录/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { //本题需要利用二叉树的回溯,而后序遍历本身就是天然.原创 2022-02-26 15:41:51 · 237 阅读 · 0 评论 -
leecode 501. 二叉搜索树中的众数
501. 二叉搜索树中的众数 本题是一个二叉搜索树,遇到二叉搜索树最清楚的是用中序遍历,因为中序遍历直接由小到大排序,然后根据要求修改代码。本题需要找到众数,经过中序遍历后记录排序后的数组的最大众数,直接得到结果,但是代码实现比较麻烦。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr...原创 2022-02-26 00:15:42 · 181 阅读 · 0 评论 -
leecode 530. 二叉搜索树的最小绝对差
530. 二叉搜索树的最小绝对差 本题仍然是二叉搜索树,由于中序遍历搜索树是按照由小到大排列,因此只需要将树中序遍历,用一个pre树记录当前节点的前一个节点,然后判断结果大小,最终输出即可。这里pre容易搞错,以上图为例,当前节点为2时,我刚开始还以为pre是3,其实是1。因为中序遍历先把左子树节点遍历完以后再往回遍历,而pre记录的当前节点就是最小节点,从最小节点开始慢慢由小到大遍历。这里后期回顾要好好复习./** * Definition for a binary...原创 2022-02-24 12:16:29 · 258 阅读 · 0 评论 -
leecode 98. 验证二叉搜索树
98. 验证二叉搜索树 这题用两种递归,首先想到的是用当前节点和左右节点的值比较,但是最后仍然失败了。主要是因为二叉搜索树要保证的是当前节点的左子树全部小于当前节点的值,右子树全部大于当前节点的值。如果只比较左右节点,有可能当前节点右子树的左节点比当前节点还小,但是仍然符合递归条件,如下是错误示例。class Solution { public boolean isValidBST(TreeNode root) { if(root == ...原创 2022-02-24 11:35:21 · 407 阅读 · 0 评论 -
leecode 617. 合并二叉树
617. 合并二叉树本体是操作两个二叉树,正常的递归做法。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * T...原创 2022-02-23 11:15:18 · 151 阅读 · 0 评论 -
leecode 113. 路径总和 II
113. 路径总和 II这题是112. 路径总和的变体,需要注意两个题的区别,112题是求二叉树是否存在一个与目标值相等的和,如果有相等的值,直接返回,不用管其他分支是否还有,因为这个树上已经存在一个与目标值相等的分支,因此这题不用遍历整个树;而本题是需要找到所有与目标值相等的分支,因此需要对整个树遍历,当遍历到符合目标值的时候,就将这个分支记录下来,直到整棵树遍历后再去看有多少结果,最终输出所有符合要求的树分支。/** * Definition for a binar...原创 2022-02-22 11:01:36 · 264 阅读 · 0 评论 -
leecode 105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树 这个图表明了这个二叉树的遍历顺序,但是下标是按照左闭右闭原则,我的做法是左闭右开/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val...原创 2022-02-21 18:22:23 · 92 阅读 · 0 评论 -
leecode 106. 从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树'递归的还原过程:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int原创 2022-02-21 17:19:52 · 247 阅读 · 0 评论 -
leecode 112. 路径总和
112. 路径总和/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left原创 2022-02-18 11:36:26 · 180 阅读 · 0 评论 -
leecode 513. 找树左下角的值
513. 找树左下角的值迭代:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode l.原创 2022-02-17 12:15:34 · 164 阅读 · 0 评论 -
leecode 404. 左叶子之和
404. 左叶子之和本题注意是左叶子节点, 不是左节点,因此需要判断是否是左叶子节点,当一个节点的左节点不为空,左节点的左右节点都为空时,则为左叶子节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tre...原创 2022-02-15 11:36:45 · 144 阅读 · 0 评论 -
leecode 257. 二叉树的所有路径
257. 二叉树的所有路径第一种方法:递归。需要注意,原题答案需要输出 "->" ,因此需要用StringBuffer拼接。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int v...原创 2022-02-13 11:15:02 · 241 阅读 · 0 评论 -
leecode 110. 平衡二叉树
110. 平衡二叉树本题用自顶向下递归和自底向上递归两种方法,后一种方法是最优解。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val ...原创 2022-02-11 11:04:05 · 275 阅读 · 0 评论 -
leecode 222. 完全二叉树的节点个数
222. 完全二叉树的节点个数/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode l.原创 2022-02-10 11:13:23 · 318 阅读 · 0 评论 -
leecode 111. 二叉树的最小深度
111. 二叉树的最小深度 递归:注意:和二叉树的最大深度不同,并不是直接将最大值变为最小值,最后的节点左右子节点应都为空才是最小深度,只有一边为空的时候不是最小节点,需要向另一个节点延伸,直到找到左右子节点都为空的时候结束。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode ri...原创 2022-02-10 10:23:06 · 301 阅读 · 0 评论 -
leecode 559. N 叉树的最大深度
559. N 叉树的最大深度此题是二叉树最大深度的小升级版,递归和迭代都可以用二叉树稍微修改。递归需要注意,n叉树中的子树是children,不知道有多少子树,所以需要在判断子树不为空以后遍历root.children,对每个子树递归。/*// Definition for a Node.class Node { public int val; public List<Node> children; public Node() {} .原创 2022-02-10 09:07:48 · 326 阅读 · 0 评论 -
leecode 101. 对称二叉树
101. 对称二叉树二叉树实现的两种方法:递归、迭代。原创 2022-02-09 11:40:02 · 231 阅读 · 0 评论 -
leecode 226. 翻转二叉树
226. 翻转二叉树两种方法,递归和迭代,递归思想是将当前节点的子节点交换后调用自身方法继续交换两个子节点的子节点,迭代思想是利用层序遍历的思想,代码也类似。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNo原创 2022-02-07 11:25:35 · 935 阅读 · 0 评论 -
leecode 102. 二叉树的层序遍历
102. 二叉树的层序遍历本题仍然有两种做法,递归和迭代,详细见代码。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNod原创 2022-02-06 11:19:35 · 393 阅读 · 0 评论 -
leecode 二叉树的前中后序遍历
144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历两种方法来做,递归和迭代。递归注意结束条件,迭代注意入栈顺序,比如前序遍历需要先入栈根值取出后再入栈右子树和左子树,出栈时是左子树先出,这样就符合中左右的前序遍历方式。递归:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree原创 2022-02-05 11:52:25 · 1054 阅读 · 0 评论