/*层次遍历,其实就是一个队列,先把根节点压入,之后进入循环,每次先弹出一个根节点,在输出值后,将其左右子树分别压入队列*/ void InorderTraversal(BinTree BT) { BinTree T; Stack S = CreateStack(100);//创建并初始化堆栈 wh ...
分类:
其他好文 时间:
2020-05-08 09:25:03
阅读次数:
66
142题—148题 知识点: 二叉搜索树:一棵空树或者左子树小于根节点,右子树大于根节点的树 先序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍历:左子树->右子树->根节点 142.合法二叉搜索树 题目链接 来源:力扣(LeetCode)链接:https://lee ...
分类:
其他好文 时间:
2020-05-08 00:26:25
阅读次数:
82
首先复习下二叉搜索树的定义: 在二叉搜索树中: 1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。 2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。 3.任意结点的左、右子树也分别为二叉搜索树 总结一下就是,树的中序遍历可以得到一个升序序列。 那如 ...
分类:
其他好文 时间:
2020-05-07 00:57:57
阅读次数:
73
题目描述 设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。 如果指定节点没有对应的“下一个”节点,则返回null。 示例: 思路 本质上是二叉树的中序遍历。使用 pre 表示当前节点的前一个节点,如果 pre val==目标值,输出当前节点即可。代码如下: 时间复杂度:O(n ...
分类:
其他好文 时间:
2020-05-06 18:07:43
阅读次数:
62
思路:前序是根左右,前序序列第一个元素一定是根。中序是左,根,右。根节点左边一定是左子树,右边一定是右子树。 树没有重复元素,所以,先找出根节点,初始化一个TreeNode root,再根据数值相同,找中序遍历里面的根节点,之后用Arrays.copyOfRange(preorder,1,num+1 ...
分类:
其他好文 时间:
2020-05-06 12:18:34
阅读次数:
53
题目描述 给定一个二叉搜索树,编写一个函数?kthSmallest?来查找其中第?k?个最小的元素。 说明: 你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例: 题目链接: https://leetcode cn.com/problems/kth smallest elemen ...
分类:
其他好文 时间:
2020-05-06 12:02:09
阅读次数:
46
题目描述 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 题目链接: https://leetcode cn.com/problems/minimum absolute difference in bst/ 思路 二叉搜索树的中序遍历序列是一个升序序列。任 ...
分类:
其他好文 时间:
2020-05-05 23:45:00
阅读次数:
178
解题(失败) 思路 分别遍历左右子树,用pre存储上一个节点,作比较 代码 本想把左右子树判断函数合并,但运行结果是错的,问题复杂化了,思路有问题 优解 思路 中序遍历时,判断当前节点是否大于中序遍历的前一个节点,如果大于,说明满足BST,继续遍历;否则直接返回false 代码 小结 做题前缺乏思考 ...
分类:
编程语言 时间:
2020-05-05 23:22:34
阅读次数:
84
https://leetcode-cn.com/problems/validate-binary-search-tree/ 树题,没什么好说的,直接递归就完事了。 第一种,使用中序遍历将输出值保存在list中,然后检查这个list是否升序的就可以AC.不过这个方法比较慢,3ms,java上只击败了1 ...
分类:
其他好文 时间:
2020-05-05 11:01:33
阅读次数:
48
解题思路 1. 看到题目想了想就知道用递归了,不断划分左右子树; 2. 这道题做了很久,因为对 "指针引用" 的不熟悉,一开始我使用的递归函数的返回类型为void,是通过指针作为递归函数的参数,不断更新树,最后改成这种容易看的方式; 3. 主要是要注意划分左右子树的索引,改了很多次都是因为递归时传右 ...
分类:
其他好文 时间:
2020-05-04 17:32:58
阅读次数:
56