二叉搜索树
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
LeetCode 95. 不同的二叉搜索树 II
思路:递归构造,选取当前序列的根节点,然后递给构造以该根节点的左子树集合和右子树集合,因为序列是递增的,所以根节点左边的子树一定比根节点小,右子树一定比右子树大。递归出口是end>begin,返回NULL。 参考的题解代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * ...原创 2019-06-22 12:52:47 · 207 阅读 · 0 评论 -
LeetCode 96. 不同的二叉搜索树(动态规划)
一个长度为n的序列组成的二叉搜索树总数等于以每个数字为根节点形成的搜索树的集合之和,而对于每个数字为根节点所形成的搜索树之和=左子树形成的集合个数*右子树形成的集合个数。而对于右子树形成的集合个数,若右子树序列长度为len,则就等于1到len形成的搜索树集合的个数,因为序列是递增。(举个例子,即1到5与6到10形成的搜索树个数相当)。所以g[n]为长度为n的序列形成的搜索树个数。 代码如下: cl...原创 2019-06-22 13:17:22 · 150 阅读 · 0 评论 -
LeetCode 235. 二叉搜索树的最近公共祖先
方法1:一开始我是这么想的,找两个结点的最近公共祖先,那么这个公共祖先及它以上的结点都是相同的路径,因为是二叉搜索树嘛。所以我两次从根节点出发搜索p,q,得到两条路径,将经过的结点存放在栈里。直到访问到栈顶元素相等时返回,这个栈顶元素就是最近的公共祖先。 代码: class Solution { public: stack<TreeNode*>s1; stack<...原创 2019-06-23 15:43:35 · 218 阅读 · 0 评论 -
剑指Offer--二叉搜索树后序遍历
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 **解答:**将当前树看成二叉搜索树,那么最后一个数字就是当前树的根,而0到right-1可以划分为两段区间,第一段区间中所有的数都小于根(当然这一段区间可能为空),第二段区间中所有的数都大于根(当然这一段区间可能为空),然后对这两段区间再进行递归判断。 cl...原创 2019-08-10 01:37:11 · 116 阅读 · 0 评论 -
剑指offer:二叉搜索树和双向链表
题目: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解答: 利用二叉树的中序遍历,找到第一个访问的结点(利用标志位first),用head记录头结点,p记录上一个访问的结点。cur记录当前中序遍历访问的结点。 代码: /* st...原创 2019-08-11 11:29:13 · 71 阅读 · 0 评论