树
leetcode 树相关算法题解
zhangxiaojiakele
这个作者很懒,什么都没留下…
展开
-
leetcode:二叉搜索树转化为双向循环链表
题目来源:力扣题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。审题:题目要求我们将一棵二叉搜索树转化为双向循环链表.由于二叉搜索树的中序遍历结果递增有序,因此我们可以考虑中序处理每一个节点,相当于我们从头构建双向循环链表.我们可以先构建一个双向链表,然后在将链表的首尾节点相连,构成双向循环链表.为了构建双向...原创 2020-04-14 17:46:29 · 454 阅读 · 0 评论 -
leetcode:删除给定值的叶子节点
题目来源:力扣题目描述:给你一棵以 root 为根的二叉树和一个整数 target ,请你删除所有值为 target 的 叶子节点 。注意,一旦删除值为 target 的叶子节点,它的父节点就可能变成叶子节点;如果新叶子节点的值恰好也是 target ,那么这个节点也应该被删除。也就是说,你需要重复此过程直到不能继续删除。审题:由于删除的是叶子节点,且删除是自底向上的过程.因此考虑...原创 2020-03-27 20:07:03 · 498 阅读 · 0 评论 -
leetcode:找出克隆二叉树中的相同节点
题目来源:力扣题目介绍:给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。其中,克隆树 cloned 是原始树 original 的一个 副本 。请找出在树 cloned 中,与 target 相同 的节点,并返回对该节点的引用(在 C/C++ 等有指针的语言中返回 节点指针,其他语言返回节点本身)。审...原创 2020-03-27 13:54:46 · 461 阅读 · 0 评论 -
leetcode:最小高度树
题目来源:力扣题目描述:给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。审题:由于数组已经是有序数组,所以构建二叉搜索树并不难,基于二叉树的特性,我们将数组划分为两部分,递归构建其左右子树即可.对于题目中要求的高度最小,我们知道一棵平衡树是高度最小的二叉树.因此我们每次切分应当保证左右子树大小相差不超过1,基于此,根节点位置只要选择在中间位置...原创 2020-03-27 13:17:25 · 418 阅读 · 0 评论 -
leetcode:特定深度节点链表
题目来源:力扣题目介绍:给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。审题:该题目较为简单,我们使用层序遍历遍历每一层,同时将每一层上节点构建一个链表即可.由于二叉树深度未知,我们可以首先是用链表结构保存创建的所有链表,其后在复制到数组中.对二叉树的层序遍历我们使用队列数据结构实...原创 2020-03-27 12:58:23 · 198 阅读 · 0 评论 -
leetcode:BiNode
题目来源:力扣题目描述:二叉树数据结构TreeNode可用来表示单向链表(其中left置空,right为下一个链表节点)。实现一个方法,把二叉搜索树转换为单向链表,要求值的顺序保持不变,转换操作应是原址的,也就是在原始的二叉搜索树上直接修改。返回转换后的单向链表的头节点。审题:首先,该题目感觉有一点没说清楚:right为下一个链表节点, 这里下一个链表节点指什么呢?根据要求值的顺序不...原创 2020-03-27 12:38:14 · 446 阅读 · 0 评论 -
leetcode:判断合法二叉搜索树
题目来源:力扣题目描述:实现一个函数,检查一棵二叉树是否为二叉搜索树。审题:此题我们可以依靠二叉搜索树的特性:二叉搜索树的中序遍历序列为递增序列.因此,我们对树中节点进行中序遍历,依次判断当前节点是否满足递增要求即可.如果当前节点值小于等于其前驱节点值,则当前二叉树不是二叉搜索树,否则,继续遍历后序节点.我们也可以将当前节点与其后继节点依次进行比较,但如果使用左中右这样的中序遍历序...原创 2020-03-27 11:54:09 · 438 阅读 · 0 评论 -
leetcode:二叉搜索树节点的后继节点
题目来源:力扣题目介绍:设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。如果指定节点没有对应的“下一个”节点,则返回null。审题:根据二叉搜索树的特点,我们可以整理出判断后继节点的递归思路:如果指定节点p的值大于等于当前根节点的值,则节点p的后继节点位于根节点右子树中(如果存在的话).如果制定节点p的值小于当前根节点值,则节点p的后继节点可能存在两种情...原创 2020-03-26 21:44:29 · 1565 阅读 · 0 评论 -
leetcode:二叉树重建
题目来源:力扣题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ \9 20/ \ 15 7审题:...原创 2020-03-26 20:32:26 · 107 阅读 · 0 评论 -
leetcode:树的子结构
题目来源:力扣题目描述:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ \4 5/ \1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。审题:由于当前子结构的根节点可能位于树中任意节点,因此我们需...原创 2020-03-26 18:06:08 · 248 阅读 · 0 评论 -
leetcode:对称的二叉树
题目来源:力扣题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ \2 2/ \ / \3 4 4 3审题:一棵二叉树如果是对称的,则其左子树与右子树也是对称的.因此,可以将判断一棵二叉树是否对称转化为判断两颗子树是否对称.如果两颗子树...原创 2020-03-26 17:06:12 · 119 阅读 · 0 评论 -
leetcode:二叉树中和为某一值的路径
题目来源:力扣题目描述:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。审题:该题目为树搜索中的路径和问题.本题的复杂之处在于不单单是搜索符合要求的路径数量,而且是要打印出路径.本题的简单之处则在于对路径的定义:路径从根节点开始,且结束于叶节点.考虑我们该如何打印出节点的路径呢?对于这道题,我一开始的设...原创 2020-03-26 16:26:45 · 320 阅读 · 0 评论 -
leetcode:二叉树路径和
题目来源:力扣题目描述:给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。审题:题目中的重点包括如下:节点值或正或负路径可从任意节点开始路径只能沿父节点到子节点由于路径可从任意节点开始,且只能沿...原创 2020-03-26 12:45:43 · 596 阅读 · 0 评论 -
leetcode: 二叉树最近公共祖先
题目来源:力扣之前写过一篇关于二叉搜索树最近公共祖先的博文,如果没有了解过这类题目的,可以先去瞅一瞅.由于二叉搜索树的特性,我们可以使用类似二分搜索的算法搜索两个节点的公共祖先.此篇讲解对于一般二叉树,最近公共祖先的查找算法.题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 ...原创 2020-03-26 12:05:09 · 163 阅读 · 0 评论 -
leetcode:二叉搜索树最近公共祖先
题目来源:力扣题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”审题:该题目要求在二叉搜索树中查找指定两节点的公共祖先.对于二叉搜索树,其左子树节点值均小于当前节点值,右子树节点...原创 2020-03-26 10:52:11 · 165 阅读 · 0 评论 -
leetcode:判断一棵树是否为平衡二叉树
题目来源:力扣题目要求:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。审题:题目要求很简单,判断一棵树是否为平衡二叉树.根据平衡二叉树的定义,我们可以得出一棵平衡树的所有子节点构成的子树也一定为平衡树.这种递归的定义指引我们使用递归的方式来判断一棵树是否是平衡二叉树.我们可以使用如下思路判断:如果以当前...原创 2020-03-26 10:17:39 · 1500 阅读 · 0 评论 -
leetcode: 二叉搜索树中第k小的元素
题目来源:力扣题目要求:给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。审题:看到这道题,我一开始想到,由于二叉树的左子树节点值均小于当前节点值,因此当前节点由小到大排序的次序即是其其左子树节点个数.因此,如果当前节点的排名大于次序k,我们便在左子树继续寻找,如果等于排名...原创 2020-03-25 21:55:16 · 229 阅读 · 0 评论 -
leetcode:完全二叉树节点个数
题目来源:力扣题目描述:给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。审题:此题为求树中节点个数,可以直接使用递归方法计算树中遍历树中所有节点,计算节点总个数.该方法时间复杂度为O(N)...原创 2020-03-25 17:24:29 · 620 阅读 · 0 评论