二叉树
leetcode的刷题
059
这个作者很懒,什么都没留下…
展开
-
二叉树的序列化与反序列化
一、题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。二、代码前序遍历/** * Definition for a binary tree node. * public clas.原创 2021-02-09 15:29:47 · 102 阅读 · 0 评论 -
二叉树的最近公共祖先
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeN...原创 2020-08-24 13:04:22 · 106 阅读 · 0 评论 -
回溯算法解决路径总和
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { List<List<Integer>> result = new LinkedList&l...原创 2020-08-23 11:34:19 · 217 阅读 · 0 评论 -
有序链表转换二叉搜索树
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } *...原创 2020-08-21 12:40:28 · 100 阅读 · 0 评论 -
二叉树的最小深度
注意是到最近的叶子节点,[1,2]得到最小深度为2/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int minDepth(TreeNode r..原创 2020-08-20 11:32:34 · 78 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode buildTree(int[] preorder, int[] inor...原创 2020-08-18 13:05:07 · 149 阅读 · 0 评论 -
二叉树平衡性
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isBalanced(TreeNode root) { if(roo...原创 2020-08-13 21:48:02 · 138 阅读 · 0 评论 -
合法二叉搜索树
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { List<TreeNode> nodeList = new ArrayList<>();...原创 2020-08-13 21:42:07 · 123 阅读 · 0 评论 -
前序遍历
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private List<Integer> nodeList = new ArrayList<...原创 2020-08-13 21:29:03 · 127 阅读 · 0 评论 -
二叉树层次遍历
代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { List<List<Integer>> nodeLists = new Arra...原创 2020-08-09 22:46:06 · 184 阅读 · 0 评论 -
翻转二叉树
递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode invertTree(TreeNode root) { ...原创 2020-08-09 22:43:50 · 72 阅读 · 0 评论 -
使用迭代的方式进行二叉树的中序遍历
一、题目二、代码引入栈的思想 ,沿根节点左孩子节点入栈,左边走不下去了,就打印节点,并转向右边,然后右边继续这个过程/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solutio.原创 2020-06-28 17:22:16 · 210 阅读 · 0 评论 -
相同的树
一、题目二、代码递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public boolean isSameTree(TreeNode p, T..原创 2020-06-13 14:22:42 · 82 阅读 · 0 评论 -
删除二叉搜索树中的节点
一、思路递归出口:当前节点为空,返回null 当前节点的值等于要删除节点的值:当前节点没有左子树 当前节点没有右子树 当前节点既有左子树又有右子树二、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = ..原创 2020-06-02 15:07:16 · 124 阅读 · 0 评论 -
二叉搜索树迭代器
一、思路采用二叉搜索树中序遍历至动态数组的方法二、代码注意:hasNext()中num++是错的,它会修改num的值,next()再次修改就会出现错误。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } *.原创 2020-06-01 13:53:32 · 168 阅读 · 0 评论 -
二叉搜索树中第K小的元素
一、思路思路:二叉搜索树中序遍历得到有序的动态数组 按照 k-1下标取值二、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * ..原创 2020-06-01 13:05:18 · 158 阅读 · 0 评论 -
二叉搜索树的最近公共祖先
一、思路思路: 从根节点开始,如果p、q均小于root,则到左子树中找 如果p、q均大于root,则到右子树中找 其他情况包括两种:p、q一个比root大一个比root小;p、q中有一个就是root,则直接返回root 二、代码采用迭代的方法/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *原创 2020-05-31 14:18:24 · 120 阅读 · 0 评论 -
将有序数组转换为二叉搜索树
一、思路采用递归的思路:递归出口:nums为null low > high low = high递归过程:找出中间节点,节点左侧为节点左子树,右侧为节点右子树二、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int ..原创 2020-05-30 14:16:37 · 96 阅读 · 0 评论 -
二叉搜索树的范围和
一、思路思路:中序遍历至动态数组 循环判断,并累加二、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { private List&l...原创 2020-05-30 13:16:11 · 94 阅读 · 0 评论 -
二叉搜索树的最小绝对差
一、思路思路:二叉搜索树经典中序遍历,至链表中 中序遍历后,链表中的元素即为升序,因此相邻两个节点的差的最小值的绝对值即为答案二、代码注意:用常规的二重循环,时间复杂度过大,无法通过leetcode。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeN.原创 2020-05-29 18:01:32 · 153 阅读 · 0 评论 -
验证二叉搜索树
一、思路先说一个常见的错误思路即递归递归出口:节点为空 左右节点为空 左节点为空,右节点不为空 右节点为空,左节点不为空递归过程:左节点为空,右节点不为空,验证右子树是否为二叉树 右节点为空,左节点不为空,验证右子树是否为二叉树 验证左子树和右子树是否为二叉搜索树代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode le.原创 2020-05-29 16:00:37 · 156 阅读 · 0 评论 -
二叉搜索树中的插入操作
一、思路给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。思路:按照二叉搜索树的特性,注意要额外引入一个prev指针,指向二叉搜索树的末端,便于新节点的插入。二、代码根据思路可得代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode..原创 2020-05-28 15:58:37 · 597 阅读 · 1 评论 -
二叉搜索树中的搜索
一、思路给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为 BST ,又被称为:二叉查找树、二叉排序树 1.任意一个节点的值都大于其左子树所有节点的值 2.任意一个节点的值都小于其右子树所有节点的值 3.它的左右子树也是一棵二叉搜索树二、代码由二叉排序树的特性,可得代码。/** * Defini..原创 2020-05-28 15:22:02 · 92 阅读 · 0 评论 -
二叉树的最大深度
一、思路根据题目,考虑递归 ,思路如下:递归出口:节点为空,返回高度0递归过程求出左右子树的高度 找出最高的高度 + 1,即可得到该树的高度二、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }原创 2020-05-27 14:58:04 · 82 阅读 · 0 评论 -
二叉树展开为链表
一、题目给定一个二叉树,原地将它展开为一个单链表。二、思路先说一个较为麻烦、耗费空间的解法:由题目可知,其将二叉树转换为单链表的顺序即二叉树的先序遍历 将先序遍历的节点放在动态数组中 在将动态数组转化为链表这样的解法容易想,但用了额外的动态数组空间,不符合题目原地的本意。于是,采用另一种思路,递归的方式:递归出口:节点为空递归过程:节点左子树展开成链表 节点右子树展开成链表 将节点的左子树,移到节点右子树的位置 将节点的右子树,移到新右子树的位置如下图...原创 2020-05-27 14:10:07 · 753 阅读 · 0 评论 -
N叉树的先序遍历
一、思路题目如下由示例可知N叉树和二叉树类似,不过其指针域是由链表构成,这也就是说不同的节点,指针域的节点数可能是不同的。思路:类比二叉树的前序遍历,注意节点域的处理。class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } publi.原创 2020-05-26 18:33:02 · 350 阅读 · 0 评论 -
二叉树最大宽度
一、思路示例此题我们可以利用二叉树的层次遍历去做,思路如下给二叉树从根节点开始编号,根节点编号为1,其左子节点则为 2 *1 ,右子节点则为2 * 1 +1。 层次遍历,遍历每层时,都要统计该层最大宽度,即最大序号 -最小序号 + 1。 比较出所有层最大的宽度返回。二、代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode le.原创 2020-05-26 17:50:29 · 282 阅读 · 0 评论 -
对称二叉树
给定一个二叉树,检查它是否是镜像对称的。在正确解法之前,先说一下掉入思维陷阱的错误解法。一、错误写法先通过经典的中序遍历将节点放到一个动态数组当中 判断该动态数组是否对称该解法看似正确,实则特殊情况并不适用,例如输入为[1,2,2,2,null,2]时就会发生误判。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *原创 2020-05-25 15:28:43 · 85 阅读 · 0 评论