Q:给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. T: 中序遍历,递归: int count = 0; public: TreeNode* KthNode(TreeNode* pRoot, unsigned int k) { if(pRoot){ TreeNode *ret = KthNode(pRoot->left, k); if(ret) return ret; if(++count == k) return…
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4.     解: 由于二叉搜索树的中序遍历是升序,所以在中序基础上添加计数器即可. class Solution { public: TreeNode* KthNode(TreeNode* pRoot, int k) { int i=INT32_MIN; return func(pRoot,k,i); } TreeNode* func(TreeNode*…
62. 二叉搜索树的第 k 个结点 题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 法一: 非递归中序遍历 TreeNode* KthNode(TreeNode* pRoot, int k) { // 采用中序遍历这个树,遍历到第k个结点就是答案 stack<TreeNode*> s; ; TreeNode* cur = pRoot; while(cur || !s.empty()){ while…
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 Offer_68_1 题目描述 方法一:迭代法 由于该题的二叉树属于排序二叉树,所以相对较简单. 只需要判断两个结点是否在根节点的左右子树中,这可以通过值的大小来判断. 不断迭代左右子树即可得到结果. package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/15 23:29 */ /** * 题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最…
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)." 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [6,2,8,0,4,7,9,null,n…
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. 题目描述 实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器: BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象.BST 的根节点 root 会作为构造…
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 题目地址 https://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13&tqId=11215&rp=3&ru=/ta/coding-intervie…
题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. [思路]遍历二叉搜索树,存入一个vector中,对该vector排序,返回第k个结点. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {…
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 后序遍历,顾名思义根节点位于尾部,故可将一个序列分为左子树序列.右子树序列和根节点,对于两个子序列又可分别验证是否是二搜索叉树的后序序列,即此问题是一个递归问题.递归的出口是系列中仅包含一个元素. C++代码实现 class Solution { public: bool VerifySquenceOfBST(vector<int> s…
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数n(1<=n<=10000),表示数组的长度. 第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]. 输出: 对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No. 样例输入: 样例输出: Yes No 解题思路: 首先我们观察题目:二叉…