随笔分类 - 树相关
摘要:Pre- and Post-order Traversals PAT-1119 这题难度较大,主要需要考虑如何实现根据前序遍历和后序遍历来确定一颗二叉树 一篇好的文章: 题解 import java.util.Scanner; /** * @Author WaleGarrett * @Date 20
阅读全文
摘要:LCA in a Binary Tree PAT-1151 本题的困难在于如何在中序遍历和前序遍历已知的情况下找出两个结点的最近公共祖先。 可以利用据中序遍历和前序遍历构建树的思路,判断两个结点在根节点的左右子树,依次递归找到最近祖先 import java.util.HashMap; import
阅读全文
摘要:Build A Binary Search Tree PAT-1099 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树。 解法:可以根据中序遍历的思路,首先将给定的序列串进行排序即是中序遍历的结果。接着,根据给定的树结构进行中序遍历,这期
阅读全文
摘要:Tree Traversals Again Tree Traversals Again 这里的第一个tip就是注意到非递归中序遍历的过程中,进栈的顺序恰好是前序遍历的顺序,而出栈的顺序恰好是中序遍历的顺序。 第二个需要注意的就是如何根据中序遍历和前序遍历构建出一棵二叉树。 第三个是二叉树的后序遍历,
阅读全文
摘要:Root of AVL Tree PAT-1066 这是关于AVL即二叉平衡查找树的基本操作,包括旋转和插入 这里的数据结构主要在原来的基础上加上节点的高度信息。 import java.util.*; /** * @Author WaleGarrett * @Date 2020/9/5 10:41
阅读全文
摘要:Complete Binary Search Tree PAT-1064 本次因为涉及到完全二叉排序树,所以可以使用数组的形式来存储二叉排序树 对输入序列排序后,得到的是中序遍历二叉排序树的序列。对这颗二叉排序树进行中序遍历,将每个结点的值放入二叉树的存储数组中,最后遍历数组即可求出层次遍历的序列。
阅读全文
摘要:Is It a Binary Search Tree PAT-1043 主要涉及到根据前序遍历序列片段是否是一颗二叉树,这里有一个小tip就是插入序列就是二叉树的前序遍历序列。 第二个是会对排序二叉树进行前序遍历,后序遍历,镜像排序二叉树的前序遍历,后序遍历等操作。 题目的整体难度不大,但是对二叉树
阅读全文
摘要:在受污染的二叉树中查找元素 "LeetCode 1261"
阅读全文
摘要:二叉搜索树的第k大节点 "LeetCode 面试题54" 需要充分了解二叉搜索树的性质. 利用中序遍历的思想,采用相反的思想:先遍历右节点再遍历左节点。
阅读全文
摘要:重建二叉树 "LeetCode 105" 首次需要知道前序遍历和中序遍历的性质。 解题思路如下:首先使用前序比遍历找到根节点,然后使用中序遍历找到左右子树的范围,再分别对左右子树实施递归重建。 本题的难点就是如何在前序遍历中找到左右子树的范围以分别重构,这可以根据中序遍历中的左右子树的数量来分辨。使
阅读全文
摘要:二叉搜索树的范围和 "LeetCode 938" 1. 首先需要仔细理解题目的意思:找出所有节点值在L和R之间的数的和。 2. 这里采用递归来完成,主要需要注意二叉搜索树的性质。
阅读全文
摘要:祖父节点值为偶数的结点值之和 "LeetCode 1315" 这题稍微难度有点大,但是仔细思考还是可以找到思路的。 因为只需要找到祖父节点这最上两层,所以可以带一个参数记录一下祖父节点是否是偶数,以及父节点是否是偶数。 求解的时候还需要注意本身结点是否是偶数,这个时候再改变参数的值。
阅读全文
摘要:层数最深叶子结点的和 "LeetCode 1302" 这里可以采用上一题中求解二叉树的深度的方法。 因为需要记录最深结点的值的和,所以这里可以边求和,如果遇到不符合最深结点时再将和sum=0.
阅读全文
摘要:二叉树的深度 "二叉树的深度" 使用递归求解二叉树的深度。 需要注意使用的临界条件。
阅读全文
摘要:#对称二叉树 ##symmetric tree 和上一题的镜像树很相似,这里是判断是否是对称树,需要利用镜像树的性质。 对称树满足两个性质: 2.1. 两个子树的结点值需要相同。 2.2. 第一颗树的左子树和第二课树的右子树也满足这种对称树的关系(结点值相同)。 使用递归求解较容易想到,还可以使用迭
阅读全文
摘要:二叉树的镜像 "二叉树的镜像" 1. 给定一个二叉树,输出二叉树的镜像。 2. 只需要使用一个简单的递归,分别对左右子树反转后再对当前结点进行反转。
阅读全文
摘要:特定深度节点链表 求解每一层二叉树从左到右遍历形成的链表 "list of depth lcci" 这是关于二叉树的问题,遍历每一层的结点并且存在链表中。 可以采取队列类似于广度优先搜索的方法进行搜索。每次出队列时,首先记录队列中还有多少个同一层的结点,再遍历所有这些结点并且将左右结点再次进栈。
阅读全文
摘要:Stay Real "HDOJ 6645" 由小根堆的性质可以知道,当前最大的值就在叶节点上面,所以只需要排序后依次取就可以了。 include include include include include using namespace std; int n; long long heap[10
阅读全文