数据结构专栏---二叉树
文章平均质量分 66
努力彪
但行好事,莫问前程
展开
-
树的子结构(中等难度,好题目)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)题目链接:点我进入leetcode思路与代码思路展现这道题目首先跟之前的一道题目非常的类似,但其实有所不同,在此先贴上链接:另一课树的子树先来说一点:树的子结构跟子树是完全两个不同的概念,准确来说树的子结构更像是包含了子树的概念,例如对与[1,2,3,4,5]这棵树而言,[2,4,5]是他的子树,但是2不能作为它的子树,但是可以作为子结构.先来看代码,我们挨个进行解析代码示例class Solution {原创 2022-02-10 13:07:50 · 511 阅读 · 0 评论 -
二叉树的镜像(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接点我进入题目思路与代码思路展现这块我推荐这个人的题解,写的很详细,非常好.戳我戳我这个题目与之前对称二叉树不同的是,这个题目是需要我们输出镜像二叉树,那个题目只需要判断即可,在此附上我们的博客:对称二叉树代码示例class Solution { public TreeNode mirrorTree(TreeNode root) { helper(root); ret原创 2022-02-05 19:02:57 · 628 阅读 · 0 评论 -
二叉搜索树的最近公共祖先(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入此题目思路与代码思路展现此题目思路与之前一道题目二叉树的最近公共祖先这道题目是一个类型的,所以直接看我这篇博客即可.点我进入链接两道题目解法一摸一样.思路也一样代码示例class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root =原创 2022-02-05 10:32:36 · 401 阅读 · 0 评论 -
从上到下打印二叉树 III(中等难度)
目录题目概述(中等难度)思路与代码思路展现方法1 层序遍历 + 双端队列代码示例方法2 层序遍历 + 倒序代码示例题目概述(中等难度)题目链接:点我进入链接思路与代码思路展现方法1 层序遍历 + 双端队列这块直接看K神题解就好,链接放到这里了:戳我戳我个人认为双端队列是需要掌握的,而且有了前面两道题目的铺垫,建议这道题目直接看代码就能理解K神的意思了.代码示例/** * Definition for a binary tree node. * public class TreeN原创 2022-02-04 21:55:21 · 105 阅读 · 0 评论 -
从上到下打印二叉树 II(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入链接思路与代码思路展现这个题目其实就是二叉树的层序遍历(使用队列)+List集合来完成遍历的操作同时这道题目还要分层打印出来,这也是这道题目的难点,一开始我也没想出来,后来看到了卡神的操作是真的秀,同学们要是想复习二叉树的层序遍历操作可以来看我的这篇博客:点我进入对应博客要想使我们的最后的结果是分层打印出来,就需要使用循环,但是这个循环非常的巧妙: for(int i = queue.size原创 2022-02-04 16:49:45 · 542 阅读 · 0 评论 -
从上到下打印二叉树(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:点我进入链接思路与代码思路展现这个题目其实就是二叉树的层序遍历(使用队列)+List集合来完成遍历的操作同学们要是想复习二叉树的层序遍历操作可以来看我的这篇博客:点我进入对应博客代码示例class Solution { public int[] levelOrder(TreeNode root) { if(root == null) { return new原创 2022-02-04 17:20:22 · 282 阅读 · 0 评论 -
二叉搜索树的后序遍历序列(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例题目概述(中等难度)题目链接:点我进入链接思路与代码思路展现这块的思路就看这个大佬的题解吧:写的很详细点此进入题解代码示例class Solution { public boolean verifyPostorder(int[] postorder) { return helper(postorder, 0, postorder.length - 1);}boolean helper(int[] postor原创 2022-02-04 15:57:30 · 399 阅读 · 0 评论 -
二叉搜索树的第k大节点(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例题目概述(简单难度)题目链接:思路与代码思路展现思路建议大家还是看K神的解答即可:点我进入解答代码示例class Solution { int res,k; //注意kthLargest方法要放在dfs方法前,因为涉及到k的赋值 public int kthLargest(TreeNode root, int k) { this.k = k; dfs(root); re原创 2022-02-04 10:47:02 · 450 阅读 · 0 评论 -
验证二叉搜索树(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:root = [2,1,3]输出:true示例2:输入:root = [5,1,4,null,null,3,6]输出:false解释:根节点的值是 5 ,但是右子节点的原创 2021-11-01 13:37:35 · 111 阅读 · 0 评论 -
根据二叉树创建字符串(简单难度)(本人认为是中等难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)你需要采用前序遍历的方式,将一个二叉树转换成一个由括号和整数组成的字符串。空节点则用一对空括号 “()” 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。示例 1:输入: 二叉树: [1,2,3,4] 1 / \ 2 3 / 4 输出: "1(2(4))(3)"解释: 原本将是“1(2(4)())(3())”,在你原创 2021-10-28 15:08:09 · 88 阅读 · 0 评论 -
从中序与后序遍历序列构造二叉树(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7题目链接:点我进入leetcode思路与代码思路展现代码示例总结...原创 2021-10-25 13:34:11 · 257 阅读 · 0 评论 -
从前序与中序遍历序列构造二叉树(中等难度)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]题目链接:点我进入l原创 2021-10-25 11:47:45 · 238 阅读 · 0 评论 -
二叉搜索树与双向链表(中等难度)(好题目)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数0≤n≤1000,二叉树中每个节点的值 10000≤val≤1000要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回原创 2021-10-23 19:06:59 · 270 阅读 · 4 评论 -
二叉树的最近公共祖先(中等难度)(面试常考)!!
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3原创 2021-10-23 11:32:18 · 158 阅读 · 8 评论 -
二叉树的构建及遍历(困难难度)
目录题目概述(困难难度)思路与代码思路展现代码示例总结题目概述(困难难度)描述编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入描述输入包括1行字符串,长度不超过100。输出描述可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个原创 2021-10-23 09:26:07 · 355 阅读 · 0 评论 -
二叉树的后序遍历---非递归解法(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?题目链接:点我进入leetcode思路与代码思路展现代码示例总结考察对于二叉树后序遍历的理解....原创 2021-10-22 13:21:45 · 100 阅读 · 0 评论 -
二叉树的中序遍历---非递归解法(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给你二叉树的根节点 root ,返回它节点值的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]题目链接:点我进入leetcode原创 2021-10-22 11:30:43 · 173 阅读 · 0 评论 -
二叉树的前序遍历--非递归解法(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]题目链接:点我进入leetcode原创 2021-10-22 11:19:31 · 215 阅读 · 0 评论 -
二叉树的完全性检验(中等难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,确定它是否是一个完全二叉树。百度百科中对完全二叉树的定义如下:若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h2^{h}2h 个节点。)示例 1:输入:[1,2,3,4,5,6]输出:true解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的原创 2021-10-22 11:13:04 · 90 阅读 · 0 评论 -
二叉树的层序遍历(中等难度,好题)
目录题目概述(中等难度)思路与代码思路展现代码示例总结题目概述(中等难度)给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]题目链接:点我进入leetcode思路与代码思路展现这道题目的核心其实就是怎么把每层的元素单独 存入一原创 2021-10-19 20:45:48 · 119 阅读 · 1 评论 -
平衡二叉树(简单难度)
目录题目概述(简单难度)思路与代码思路1代码1思路2代码2总结题目概述(简单难度)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例3:输入:root = []输出:true题目链接:点我进入原创 2021-10-19 15:00:35 · 200 阅读 · 0 评论 -
对称二叉树(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3题目链接:点我进入leetcode思路与代码思路展现这道题目的思路也是非常简单的:原创 2021-10-18 14:32:31 · 228 阅读 · 0 评论 -
另一棵树的子树(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例 1:输入:root = [3,4,5,1,2], subRoot = [4,1,2]输出:true示例 2:输入:r原创 2021-10-18 11:24:06 · 414 阅读 · 0 评论 -
相同的树(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,2], q = [1,null,2]输出:false示例 3:输入:p = [1,2,1], q = [1,1,2]输出:false题目链接:点我进入原创 2021-10-17 18:59:37 · 233 阅读 · 0 评论 -
二叉树的最大深度(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回它的最大深度 3题目链接:点我进入leetcode思路与代码思路展现使用子问题来进行解答首先明确什么是深度?深度就是从该节点到根节点所经历原创 2021-10-15 16:53:27 · 164 阅读 · 1 评论 -
二叉树的后序遍历---递归解法(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?题目链接:点我进入leetcode思路与代码思路展现在前面的前序遍历中,我们总结出不定义外部函数的方法更加适用于此题目,所以使用递归更加适用于此题目,来看代码:代码示例class Solution原创 2021-10-14 16:49:05 · 331 阅读 · 0 评论 -
二叉树的中序遍历---递归解法(简单难度)
目录题目概述(简单难度)思路与代码思路展现代码示例总结题目概述(简单难度)给你二叉树的根节点 root ,返回它节点值的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[2,1]示例 5:输入:root = [1,null,2]输出:[1,2]题目链接:点我进入leetcode原创 2021-10-14 16:44:23 · 407 阅读 · 0 评论 -
二叉树的前序遍历---递归解法(简单难度)
目录题目概述(简单难度)思路与代码思路展现思路1(外部函数)代码1思路2(不定义外部函数)代码2总结题目概述(简单难度)给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,原创 2021-10-14 16:35:28 · 159 阅读 · 0 评论