二叉树
二叉树类算法题
菜鸡的鼻祖
这个作者很懒,什么都没留下…
展开
-
剑指Offer(第2版)——面试题54:二叉搜索树的第k大节点
题目 给定一颗二叉搜索树,请找出其中的第k大的节点。例如,在下图二叉搜索树里,按节点数值大小顺序,第三大节点的值为4。 解题思路 这棵树是二叉搜索树,首先想到的是二叉搜索树的一个特点:左子节点的值 < 根节点的值 < 右子节点的值。 如果按照中序遍历的顺序遍历一棵二叉搜索树,则遍历序列的数值是递增排序的。 如上图所示,如果使用中序遍历,则得到的序列是{2,3,4,5,6,7,8}。...原创 2020-01-14 12:43:27 · 135 阅读 · 0 评论 -
剑指Offer(第2版)——面试题36:二叉搜索树与双向链表
题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。原创 2019-09-19 21:57:14 · 189 阅读 · 0 评论 -
剑指Offer(第2版)——面试题33:二叉搜索树的后序遍历序列
题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 二叉搜索树定义:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 ...原创 2019-09-07 22:01:31 · 189 阅读 · 0 评论 -
剑指Offer(第2版)——面试题55:二叉树的深度
标题 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 解题思路 可以用递归的方法实现,我们假设已经正确拿到了root节点左右子树的最大深度,那么最后加一即可: 如果一棵树只有一个节点,那么它的深度为1; 如果根节点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1; 如果根节点只有右子树而没有左子树,那么...原创 2020-01-15 11:49:30 · 127 阅读 · 0 评论 -
剑指Offer(第2版)——面试题37:序列化二叉树
题目: 请实现两个函数,分别用来序列化和反序列化二叉树。 1.解题思路: 根据前序遍历的顺序来序列化和反序列化二叉树。在遍历二叉树碰到NULL指针时,可以用$符号表示;节点之间可以用逗号隔开。 2.代码: ...原创 2019-11-29 15:25:34 · 202 阅读 · 0 评论 -
剑指Offer(第2版)——面试题34:二叉树中和为某一值的路径
题目: 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。路径定义为从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 1.解题思路: 用前序遍历的方式访问到某一个节点时,我们把该节点添加到路径上,并累加该节点的值; 如果该节点为叶节点,并且路径中节点值的和刚好等于输入的整数,则当前路径符合要求; 如果当前节点不是叶节点,则继续访问它的子节点; 当前节点访问结束时,...原创 2019-09-08 22:34:34 · 103 阅读 · 0 评论 -
剑指Offer(第2版)——面试题32:从上到下打印二叉树
题目: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 1.解题思路: 每一次打印一个节点的时候,如果该节点有子节点,则把该节点的子节点放到一个队列的末尾; 接下来到队列的头部取出最早进入队列的节点,重复前面的打印操作,直至队列中所有的节点都打印出来为止。 举例: 首先我们打印树的根结点8,为了接下来能够打印值为8的节点的两个子节点,我们应该在遍历该节点时把值为6和1...原创 2019-09-04 23:01:46 · 133 阅读 · 0 评论 -
剑指Offer(第2版)——面试题28:对称的二叉树
题目: 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 1.解题思路: 前序遍历算法:先访问根节点,再访问左子节点,最后访问右子节点。 对称前序遍历算法:先访问根节点,再访问右子节点,最后访问左子节点。 如果二叉树的前序遍历序列和对称前序遍历序列是一样的,则说明二叉树是对称的。 举例: 遍历第一棵树,前序遍历的遍历序列为{8,6,5,7,6,7,...原创 2019-08-29 22:27:46 · 121 阅读 · 0 评论 -
剑指Offer(第2版)——面试题27:二叉树的镜像
题目: 请完成一个函数,输入一棵二叉树,该函数输出它的镜像。 1.解题思路: 先前序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。 当交换玩所有非叶节点的左,右子节点之后,就得到了树的镜像。 举例: 观察到两棵树的根节点相同,但其左右子节点交换了位置,所以首先交换根节点的两个子节点; 我们注意到值为10、6节点的子节点仍然保持不变,因此我们还需要交换这两个节点的左右...原创 2019-08-27 20:29:44 · 104 阅读 · 0 评论 -
剑指Offer(第2版)——面试题26:树的子结构
题目: 输入两棵二叉树A和B,判断B是不是A的子结构。 1.解题思路: 第一步:在树A中找到和B的根节点的值一样的节点R; 第二步:判断树A中以R为根节点的子树是不是包含和树B一样的结构; 可以使用递归的方法; 要注意空指针的处理。 2.代码: ...原创 2019-08-27 18:08:48 · 85 阅读 · 0 评论 -
剑指Offer(第2版)——面试题8:二叉树的下一个节点
题目: 给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左,右子节点的指针,还有一个指向父节点的指针。 1.解题思路: 上图是有9个节点的二叉树,树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的指针用虚线表示。它的中序遍历是d,b,h,e,i,a,f,c,g。 如果一个节点有右子树,那么它的下一个节点就是它的右子树的最左子节点。也就是...原创 2019-06-17 22:48:03 · 117 阅读 · 0 评论 -
剑指Offer(第2版)——面试题7:重建二叉树
题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 1.解题思路: 知识点: 通常树有如下几种遍历方式: 前序序列:先访问根节点,再访问左子节点,最后访问右子节点。 中序序列:先访问左子节点,...原创 2019-06-16 21:39:09 · 114 阅读 · 0 评论