![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
zy_41015
这个作者很懒,什么都没留下…
展开
-
二叉树情况总结
学习感想:通过做二叉树这一部分的题目,我本身对二叉树有了更深的体会。二叉树的题目看起来复杂多样,其实大部分都是基于二叉树的遍历基础之上的。不管做哪些题,首先我们要优先考虑的是根节点的情况,然后再分别考虑左,右子树。其次,体会更深的是递归函数的使用方法,使用递归函数可以大大节省我们的程序长度,但是在使用的过程当中,一定要明白出口在哪里?什么时候应该定义局部变量,什么时候应该定义全局变量,这些都是一些原创 2017-04-23 12:41:26 · 240 阅读 · 0 评论 -
二叉树的中序遍历
描述:给出一棵二叉树,返回其中序遍历 样例: 给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3,2]. 解题思路:与二叉树的前序遍历一样,可以利用递归函数来实现。首先访问左子树,然后访问根节点,最后访问右子树。 实现代码: /** * Definition of TreeNode: * class原创 2017-04-07 20:58:43 · 167 阅读 · 0 评论 -
二叉树的后序遍历
描述:给出一棵二叉树,返回其节点值的后序遍历。 样例: 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1]。 解题思路:本题考察的是二叉树的后序遍历,首先访问左子树,然后右子树,最后访问根节点。具体实现方法可以用递归方法实现。 实现代码: /** * Definition of TreeNode: *原创 2017-04-07 20:59:35 · 138 阅读 · 0 评论 -
克隆二叉树
描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。 样例: 给定一个二叉树: 1 / \ 2 3 / \ 4 5 返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \ 4 5 解题思路:根据已知信息,相当于把一棵二叉树复制一遍。把它的根节点复制到根节点,把它的左子树与右子树分别复制原创 2017-04-09 17:03:25 · 160 阅读 · 0 评论 -
二叉树的最大深度
描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。 样例: 给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最大深度为3 解题思路:本题考察二叉树的深度,即从根节点到最远的叶子节点的距离。首先判断根节点的情况,如果根节点为空,则二叉树的深度为0。若不是,则看它的左右子树的情况。具体可以用递归函数原创 2017-04-09 17:15:53 · 134 阅读 · 0 评论 -
翻转二叉树
描述:翻转一棵二叉树 样例: 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 解题思路:翻转一棵二叉树,就是将根节点的左右指针指向的值进行互换。所以脑子里最先想到的是sawp函数,然后想着用递归的方法来实现。 实现代码: /** * Definition of TreeNode:原创 2017-04-09 18:30:57 · 121 阅读 · 0 评论 -
二叉树的最大节点
描述:在二叉树中寻找值最大的节点并返回。 样例:给出如下一棵二叉树: 1 / \ -5 2 / \ / \ 0 3 -4 -5 返回值为 3 的节点。 解题思路:首先想到的是,要先遍历二叉树,从中找到值最大的节点然后返回,可以使用递归的方法。其次,怎样比较大小,因为要求返回的是一个节点,而不是最大值。所以这里我新建了一个maxi原创 2017-04-09 19:00:17 · 2002 阅读 · 0 评论 -
二叉树的最小深度
描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。 样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2 解题思路:二叉树的最小深度,即为根节点与最近叶原创 2017-04-09 19:35:13 · 267 阅读 · 0 评论 -
等价二叉树
描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。 样例: 1 1 / \ / \ 2 2 and 2 2 / / 4 4 就是两棵等价的二叉树。 1原创 2017-04-14 08:20:25 · 306 阅读 · 0 评论 -
二叉树的层次遍历
描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问) 样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \ 9 20 / \ 15 7 返回他的分层遍历结果: [ [3], [9,20], [15,7] ] 解题思路:这个题与普通的层序遍历之间的区别在于,要把每一层的节点分别输出。我们可原创 2017-04-14 08:30:47 · 231 阅读 · 0 评论 -
二叉树的所有路径
描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。 样例:给出下面这棵二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5", "1->3" ] 解题思路:要找到二叉树的所有路径,就相当于从根节点出发一直到叶子节点。我们可以在遍历的基础之上完成这项操作,但是又有所不同。首先从根节点出原创 2017-04-19 11:09:55 · 429 阅读 · 0 评论 -
子树
描述: 有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。 样例: 下面的例子中 T2 是 T1 的子树:原创 2017-04-20 16:18:15 · 240 阅读 · 0 评论 -
二叉树的路径和
描述: 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。 一个有效的路径,指的是从根节点到叶节点的路径。 样例:给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3 返回: [ [1, 2, 2], [1, 4] ] 实现思路:原创 2017-04-21 21:04:26 · 200 阅读 · 0 评论 -
将二叉树拆成链表
描述: 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 样例: 1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4原创 2017-04-21 21:13:15 · 135 阅读 · 0 评论 -
把排序数组转换为高度最小的二叉搜索树
描述: 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 样例: 给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \ 1 3 5 7 实现思路: 根据排序二叉树的定义: ① 或者是一棵空树; ②或者原创 2017-04-23 12:30:19 · 303 阅读 · 0 评论 -
二叉树的前序遍历
描述:给出一棵二叉树,返回其节点值的前序遍历。 样例: 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. 解题思路:本题考察的是二叉树的前序遍历,即先访问根节点在访问左子树最后访问右子树。因此可以用递归函数来实现,递归的出口为当根节点为空时,直接跳出,其余按正常方式访问。 实现代码:原创 2017-04-07 20:23:27 · 128 阅读 · 0 评论