题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4 分析: 二叉搜索树中序遍历就是从小到大.只要遍历k个结点就可以了. 代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };…
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; color: ; background-color: ; margin: 0; padding: 16px 20px; } h1, h2, h…
剑指offer 牛客网 二叉搜索树和双向链表 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 18:58:36 2019 @author: Administrator 题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. 要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路: step1:采用递归中序遍历的方式,将值放在列表中 step2:遍历将其转换成双向链表 """ c…
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   思路: 后续遍历数组的尾部为根节点,前面的部分,必然一部分为左子树,一部分为又子树,二叉搜索树,根节点左子树小于根节点的值,右子树大于. 所以我们只用遍历前面的部分,找到第一个大与根节点的,然后看后面是不是都是大于根节点的,如果是,size-1.   AC代码: class Solution { public: bool VerifySquen…
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 分析: 二叉搜索树,中序遍历就是排序的. 所以我们利用中序遍历,将前后两个结点连接在一起. 不过为了方便起见,我们可以用中序遍历的逆过程,最后遍历到最小的结点,并连接它,也可以输出为链表的首结点. 我们需要两个指针,记录一前一后的结点. 代码: /* struct TreeNode { int val; struct TreeNode *left; struct Tre…
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 数组的最后一个元素是二叉搜索树的根结点的值,我…
①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2.在BST里,左子树每个元素<根<右子树每个元素 3.从第0位开始,找到第一个>根节点的元素,记录此位置i.在此位置之前都属于左子树(此时已经断定左子树都小于根节点) 4.检查右子树是否都大于跟节点(从第i位开始,到根节点前) 5.递归判断左右子树是否都属于BST,也即重复3-4步: ③代码…
题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 牛客网链接 js代码 /* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ //方法一 let queue = [] function Convert(pRootOfTree) { // write code here if (!pRootOfTree) retu…
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 牛客网链接 js代码 function VerifySquenceOfBST(sequence) { // write code here if (sequence.length === 0) return false let length = sequence.length let root = sequence[length-1] let mi…
题目描述 给定一棵二叉搜索树,找出其中的第k小的结点,返回指向该节点的指针. 思路 中序遍历即可. 注意特判!报段错误数组越界这里就要考虑是少特判的问题. 法一:借助vector 法二(better)(学习的牛客网最佳解法):到第k个直接返回. 关键是理解: if (pNode != nullptr) { return pNode; } 有了这句话,当遍历到第k小的节点时,返回该节点指针,并会一路传出来.没有的话,则只是传给上层父节点,后续会被覆盖. 当未到第k个时,(node接收的)返回值一直…
最后一个元素是 根节点. 左子树的元素都小于根节点,右子树都大于根节点 然后递归判断 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 class Solution { public:     bool VerifySquenceOfBST(vector<int> sequence) {         int size=sequ…
[剑指Offer]二叉搜索树的第k个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 给定一颗二叉搜索树,请找出其中的第k大的结点. 例如, 5 / \ 3 7 / \ / \ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 解题方法 遇到BST想中序遍历.这个题先中序遍历,然后找出第k个节点. 代码: # -*- coding:utf-8 -*- #…
面试题 63:二叉搜索树的第k个结点 题目:给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 (见下面的图1) 中,按结点数值大小顺序第三个结点的值为4. 图1:一个有7个结点的二叉搜索树,如果按结点数值大小顺序输出,则第3个结点的值是4 提交网址: http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a?tpId=13&tqId=11215 分析: 对于二叉搜索树BS…
// 面试题54:二叉搜索树的第k个结点 // 题目:给定一棵二叉搜索树,请找出其中的第k大的结点. #include <iostream> #include "BinaryTree.h" const BinaryTreeNode* KthNodeCore(const BinaryTreeNode* pRoot, unsigned int& k); const BinaryTreeNode* KthNode(const BinaryTreeNode* pRoot,…
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…
/** * 面试题63:二叉搜索树的第k个结点 * 给定一颗二叉搜索树,请找出其中的第k大的结点 * 例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. */ public class _63_binary_k_num { public static void main(String[] args) { int[] a={8,6,10,5,7,9,11}; TreeNode63 treeNode63 = new TreeNode63(8); tre…
剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为空,此时L节点的位置就是倒数第K个节点. Java题解 package linklist; public class FindKthToFail { public static ListNode FindKthToTail(ListNode head,int k) { if(head==null||…
  题目描述:   给定一棵二叉搜索树,请找出其中的第k小的结点.例如(5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4.   解题思路:   本题实际上比较简单,主要还是考察对树的遍历的理解,只要熟练掌握了树的三种遍历方式及其特点,解决本题并不复杂,很明显本题是对中序遍历的应用.   对于本题,我们首先可以知道二叉搜索树的特点:左结点的值<根结点的值<右结点的值.因此,我们不难得到如下结论:如果按照中序遍历的顺序对一棵二叉搜索树进行遍历,那么得到的遍历序列就是递增排序的…
1. 题目描述 /* 给定一棵二叉搜索树,请找出其中的第k小的结点. 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就是结果 3. 非递归 import java.util.*; public class Solution { static TreeNode KthNode(TreeNode pRoot, int k){ return inorderNR(pRoot, k); } public static Tre…
正常情况下,因为二叉搜索树,左子树所有结点比根小,右子树所有结点比根大,所以循环一遍就能结束 ------------------------------------------------------------------------ 时间限制:1秒 空间限制:32768K 热度指数:356727 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. class Solution { public…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定一棵二叉搜索树,请找出其中的第k小的结点. 思路 设置全局变量index=0,对BST进行中序遍历,每遍历一个结点,index+1,当index=k时,该结点即为所求结点. 测试算例 1.功能测试(左斜树.右斜树.普通树) 2.边界值测试(k=1,k=结点数目) 3.特殊测试(null,k<=0,k>结点数目) Java代码 //题目:给定一棵二叉搜索树,请…
题目描述 给定一棵二叉搜索树,请找出其中的第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) {…
题目:给定一棵二叉搜索树,请找出当中的第k大的结点. 解题思路 假设依照中序遍历的顺序遍历一棵二叉搜索树,遍历序列的数值是递增排序的. 仅仅须要用中序遍历算法遍历一棵二叉搜索树.就非常easy找出它的第k大结点. 结点定义 private static class BinaryTreeNode { private int val; private BinaryTreeNode left; private BinaryTreeNode right; public BinaryTreeNode()…
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. 题解一:DFS 借助栈实现 // 中序非递归 public static TreeNode KthNode02(TreeNode pRoot, int k) { Stack<TreeNode> stack = new Stack<>(); if(pRoot==null||k<=0){ return null; } int count=0;…
题目描述 给定一棵二叉搜索树,请找出其中的第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*…
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…
/************************************************************************* > File Name: 25_BSTConvert.cpp > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月31日 星期三 15时06分28秒 *********************************************…
链接 https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题意 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路…
题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉树的后序遍历也就是先访问左子树,再访问右子树,最后访问根节点,所以不难发现,所给的数组最后一个元素一定是二叉搜索树的根节点,而如果数组是二叉搜索树的后续遍历的话,就一定会根据数值划分两部分,左边是根节点的左子树,剩下的部分则是根节点的右子树.左子树的数值均小于根节点,右子树的数值均大于根节点. 例如{5,7,6,9,11,10,8},8是…