二叉树
文章平均质量分 63
zhangchengcheng1997
这个作者很懒,什么都没留下…
展开
-
二叉树的中序遍历
1、问题描述 给出一棵二叉树,返回其中序遍历,给出二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3,2].2、实现思路 与前序遍历类似。若二叉树为空,则空操作返回。否则中序遍历根节点的左子树,访问根节点,中序遍历根节点的右子树。3、代码原创 2017-04-10 22:31:51 · 172 阅读 · 0 评论 -
二叉树的路径和
1、问题描述 给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]2、实现思路 找到路径和为给定数值的路径原创 2017-04-21 21:25:30 · 253 阅读 · 0 评论 -
把排序数组转换为高度最小的二叉搜索树
1、问题描述 给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例 给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 72、实现思路 数组的中间值来作为二叉树的根节点,左子树根节点为数组第一个数值到根节点的中间值,右子树的原创 2017-04-20 16:42:01 · 260 阅读 · 0 评论 -
子树
1、问题描述 有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。样例 下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 /原创 2017-04-20 16:39:31 · 174 阅读 · 0 评论 -
二叉树的所有路径
1、问题描述 给一棵二叉树,找出从根节点到叶子节点的所有路径。样例 给出下面这棵二叉树: 1 / \2 3 \ 5 所有根到叶子的路径为:[ "1->2->5", "1->3"]2、实现思路 遍历二叉树,直到遇到叶子节点,将此路径上节点的值变为字符串,用to_string(int valu原创 2017-04-20 16:21:28 · 238 阅读 · 0 评论 -
二叉树的层次遍历
1、问题描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)。给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]2、实现思路 由于二叉树是从左至右进行输入,故层次遍历通过队列存储每层的结点,它存原创 2017-04-15 13:05:03 · 231 阅读 · 0 评论 -
二叉树的最小深度
1、问题描述 给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。2、实现思路3、代码4、感想原创 2017-04-14 14:31:59 · 191 阅读 · 0 评论 -
二叉树的最大深度
1、问题描述 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.2、实现思路 从根节点开始依次遍历每一颗子树,记录深度,比较得最大深度。3、代码/** * Definition of TreeNo原创 2017-04-15 06:46:51 · 124 阅读 · 0 评论 -
将二叉树拆成链表
1、问题描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。样例 1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4原创 2017-04-14 13:49:16 · 198 阅读 · 0 评论 -
翻转二叉树
1、问题描述 翻转一棵二叉树。样例 1 1 / \ / \2 3 => 3 2 / \ 4 42、实现思路 将同一节点的左右子树交换。3、代码/** * Definition of TreeNode: * class TreeNode { * publ原创 2017-04-13 17:32:51 · 138 阅读 · 0 评论 -
等价二叉树
1、问题描述 检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。2、实现思路 从a,b两个数的根节点开始进行遍历,当一棵树节点有值一棵无值,输出false,当两节点值不同时输出false,两节点值相同时,继续遍历其左右结点,直至左右节点两树对应为空时输出true。3、代码/** * Defini原创 2017-04-13 17:20:11 · 403 阅读 · 0 评论 -
克隆二叉树
1、问题描述 深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。2、实现思路 类似于前序遍历,遍历原树的所有节点,将值赋值给新的树。3、代码/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left,原创 2017-04-13 17:00:37 · 145 阅读 · 0 评论 -
二叉树的最大节点
1、问题描述 在二叉树中寻找值最大的节点并返回。 给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。2、实现思路 从根节点开始前序遍历,与其左右子树结点值比较,a为遍历过的最大节点,a与接下来遍历的节点进行比原创 2017-04-13 16:26:16 · 885 阅读 · 0 评论 -
二叉树的后序遍历
1、问题描述 给出一棵二叉树,返回其节点值的后序遍历。给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [3,2,1]2、问题实现 与前序遍历、中序遍历类似。若二叉树为空,则空操作返回。否则后序遍历根节点的左子树,后序遍历根节点的右子树,访问根节点。3、代原创 2017-04-10 22:41:23 · 295 阅读 · 0 评论 -
二叉树的前序遍历
1、问题描述 给出一棵二叉树,返回其节点值的前序遍历。给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].2、实现思路3、代码/** * Definition of TreeNode: * class TreeNode { * publi原创 2017-04-10 21:56:45 · 265 阅读 · 0 评论 -
二叉树总结
关于二叉树问题,由于其本身固有的递归属性,通常我们可以用递归算法来解决。遍历是二叉树各种操作的基础,可以在遍历过程中对结点进行各种操作。一、二叉树的遍历 由二叉树的定义可知,一颗二叉树由根节点及左、右子树三个基本部分组成,因此,只要依次遍历这三部分,就可以遍历整个二叉树。 1.先序遍历: 先序遍历的递归过程为:若二叉树为空,遍历结束。否则, (1)访原创 2017-04-21 21:47:37 · 189 阅读 · 0 评论