随笔分类 -  AL_Tree

摘要:450. 删除二叉搜索树中的节点 题意 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明 阅读全文
posted @ 2019-04-02 07:06 banananana 阅读(569) 评论(0) 推荐(0) 编辑
摘要:236. 二叉树的最近公共祖先 题意 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 解题思路 后序遍历法,将pq的公共父节点问题转化为找到一个节点node使得p、q分别位于node的左右子树中; 若p和q要么分别位于左右子树中,那么对左右子结点调用递归函数,会分别返回p和q结点的位置 阅读全文
posted @ 2019-04-01 18:42 banananana 阅读(402) 评论(0) 推荐(0) 编辑
摘要:235. 二叉搜索树的最近公共祖先 题意 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 解题思路 利用BST的性质,如果该结点小于给定的其中一个结点,并且大于另外一个给定的结点,那么则认为该点是两个结点的最近公共祖先; 利用BST的性质,如果该结点小于给定的其中一个结点,并且大于另外 阅读全文
posted @ 2019-04-01 17:13 banananana 阅读(309) 评论(0) 推荐(0) 编辑
摘要:230. 二叉搜索树中第K小的元素 题意 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 解题思路 中序遍历,利用Python3中提供的生成器方法; 中序遍历,判断存储结点值的数组是否到到k 阅读全文
posted @ 2019-03-31 07:53 banananana 阅读(563) 评论(0) 推荐(0) 编辑
摘要:173. 二叉搜索树迭代器 题意 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。你可以假设 next() 阅读全文
posted @ 2019-03-31 06:55 banananana 阅读(591) 评论(0) 推荐(0) 编辑
摘要:95. 不同的二叉搜索树 II 题意 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树。 解题思路 这道题目是基于不同的二叉搜索树进行改进的; 对于连续整数序列[left, right]中的一点 i,若要生成以 i 为跟结点的BST,则有如下的规律: i 左边的序列可以作为左子 阅读全文
posted @ 2019-03-29 15:59 banananana 阅读(669) 评论(0) 推荐(0) 编辑
摘要:96. 不同的二叉搜索树 题意 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 解题思路 对于n个结点,除去了跟结点,还剩余n-1个结点,因此左右子树的结点数分配方式如下: ​ 假定G(n)表示由连续的n个数形成的二叉搜索树的个数,并且以i作为分界点, 那么左子树为G(i- 阅读全文
posted @ 2019-03-28 12:11 banananana 阅读(280) 评论(0) 推荐(0) 编辑
摘要:429. N叉树的层序遍历 题意 给定一个 N 叉树,返回其节点值的层序遍历。 (即从左到右,逐层遍历)。 解题思路 和二叉树的层次遍历的思想一样; 实现 阅读全文
posted @ 2019-03-28 10:16 banananana 阅读(384) 评论(0) 推荐(0) 编辑
摘要:107. 二叉树的层次遍历 II 题意 给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)。 解题思路 递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中; 迭代:使用两个队列是因为一个用于记录当前层的结点, 阅读全文
posted @ 2019-03-27 08:51 banananana 阅读(244) 评论(0) 推荐(0) 编辑
摘要:103. 二叉树的锯齿形层次遍历 题意 给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 解题思路 和题目102一致; 实现 阅读全文
posted @ 2019-03-27 08:11 banananana 阅读(260) 评论(0) 推荐(0) 编辑
摘要:102. 二叉树的层次遍历 题意 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 解题思路 递归:利用前序遍历的思想,在递归过程中记录下结点的深度,在对应深度将结点加入到结果中; 迭代:使用两个队列是因为一个用于记录当前层的结点,另外一个则记录下一层的结点,用于后面 阅读全文
posted @ 2019-03-27 07:58 banananana 阅读(212) 评论(0) 推荐(0) 编辑
摘要:94. 二叉树的中序遍历 题意 给定一个二叉树,返回它的中序 遍历数组; 解题思路 递归:往左子结点深度递归,在其代码下面加入当前结点的值,接着往右子结点进行深度递归; 迭代:利用栈后进先出的特性,一直将左子结点都加入到栈中,直到其不存在时,将当前结点的值加入到结果列表中,接着将当前结点的右结点加入 阅读全文
posted @ 2019-03-27 07:10 banananana 阅读(203) 评论(0) 推荐(0) 编辑
摘要:Maximum Binary Tree 最大值二叉树 题意 解法 dfs class Solution(object): def constructMaximumBinaryTree(self, nums): """ :type nums: List[int] :rtype: TreeNode "" 阅读全文
posted @ 2017-10-08 08:02 banananana 阅读(238) 评论(0) 推荐(0) 编辑
摘要:99. 恢复二叉搜索树 题意 在BST中存在两个元素被交换了,现在需要把这两个元素给交换回来变成BST。 解题思路 将其转为数组,并且排好序后重新赋值给树结点; 使用变量pre来保存访问的前一个结点,因为是中序遍历,所以前面一个结点必然是小于当前结点的,并且用两个变量维护错误的两个结点,最后将这两个 阅读全文
posted @ 2017-09-11 23:57 banananana 阅读(248) 评论(0) 推荐(0) 编辑
摘要:108. 将有序数组转换为二叉搜索树 题意 将有序数组转化为链表; 解题思路 将数组切片,中间值作为根结点,两边则则作为左子树和右子树; 维护左右两个值,实现对数组切片的功能; 实现 阅读全文
posted @ 2017-09-06 09:11 banananana 阅读(181) 评论(0) 推荐(0) 编辑
摘要:98. 验证二叉搜索树 题意 判断二叉树是否是BST,要求不能出现等于的情况,也就是左子树必须比结点小,右子树必须比结点大。 解题思路 如果对于BST的理解没有那么到位的话,可能就会写出下面的代码: 这么会存在一个问题,上面仅仅是判断了当前结点和左右子树的值,则没有考虑到祖父结点和父亲结点和子结点的 阅读全文
posted @ 2017-09-03 10:10 banananana 阅读(179) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示