二叉树——力扣刷题
文章平均质量分 69
二叉树——力扣刷题
努力更文的小白
从事Java后端,小白一枚,还请各位前辈多多指教
展开
-
寻找重复的子树
题目介绍力扣652题:https://leetcode-cn.com/problems/find-duplicate-subtrees/给定一棵二叉树,返回所有重复的子树。对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。两棵树重复是指它们具有相同的结构以及相同的结点值。分析函数签名如下:List findDuplicateSubtrees(TreeNode root);我来简单解释下题目,输入是一棵二叉树的根节点root,返回的是一个列表,里面装着若干个二叉树节点,这些节点对原创 2021-06-14 23:16:16 · 1851 阅读 · 2 评论 -
从中序与后序遍历序列构造二叉树
题目介绍力扣106题:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:分析函数签名如下:TreeNode buildTree(原创 2021-06-14 22:57:20 · 258 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树
题目介绍力扣105题:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:分析函数签名如下:TreeNode buildTree(int原创 2021-06-12 19:43:07 · 1130 阅读 · 0 评论 -
最大二叉树
题目介绍力扣654题:https://leetcode-cn.com/problems/maximum-binary-tree/给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。分析函数签名如下:TreeNode constru原创 2021-06-12 00:34:13 · 1793 阅读 · 0 评论 -
验证二叉搜索树
题目介绍力扣98题:https://leetcode-cn.com/problems/validate-binary-search-tree/给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。分析按照二叉搜索树的性质,我们可以想到需要递归地进行判断。这里需要注意的是,如果二叉搜索树的左右子树不为空,那么左子树中的所有节点,值都应该小于根节点;原创 2021-05-18 23:46:01 · 634 阅读 · 0 评论 -
平衡二叉树
题目介绍力扣110题:https://leetcode-cn.com/problems/balanced-binary-tree/给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。分析根据定义,当且仅当一棵二叉树的左右子树也都是平衡二叉树时,这棵二叉树是平衡二叉树。因此可以使用递归的方式,判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下(类似先序遍历)或者自底向上(类似后序遍历)。方法一:自顶向原创 2021-05-18 23:22:43 · 992 阅读 · 0 评论 -
二叉树展开为链表
题目介绍力扣114题:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/分析函数签名如下:void flatten(TreeNode root);我们尝试给出这个函数的定义:给flatten函数输入一个节点root,那么以root为根的二叉树就会被拉平为一条链表。我们再梳理一下,如何按题目要求把一棵树拉平成一条链表?很简单,以下流程:1、将root的左子树和右子树拉平。2、将root的右子树接到左原创 2021-06-10 23:26:54 · 130 阅读 · 1 评论 -
填充每个节点的下一个右侧节点指针
题目介绍力扣116题:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:分析题目的意思就是把二叉树的每一层节点都用next指针连接起来:而且题目说了,输入是一棵「完美二叉树」,形象地说整棵二叉树是一个正三角形,除了最右侧的节点next指针会指向null,其他节点的右侧一定有相邻的节点。这道题怎么做原创 2021-06-10 23:23:05 · 71 阅读 · 0 评论 -
二叉树的序列化与反序列化
题目介绍力扣297题:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始原创 2021-05-24 20:53:46 · 245 阅读 · 0 评论 -
翻转二叉树
题目介绍力扣226题:https://leetcode-cn.com/problems/invert-binary-tree/翻转一棵二叉树。分析这是一道很经典的二叉树问题。显然,我们可以遍历这棵树,分别翻转左右子树,一层层递归调用,就可以翻转整个二叉树了。方法一:先序遍历容易想到,我们可以先考察根节点,把左右子树调换,然后再分别遍历左右子树、依次翻转每一部分就可以了。这对应的遍历方式,就是先序遍历。代码如下:// 1. 先序遍历public TreeNode invertTree1(T原创 2021-05-18 22:37:58 · 189 阅读 · 0 评论