62. 二叉搜索树的第 k 个结点

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。

法一:

非递归中序遍历
TreeNode* KthNode(TreeNode* pRoot, int k)
{
// 采用中序遍历这个树,遍历到第k个结点就是答案
stack<TreeNode*> s;
int cnt = ;
TreeNode* cur = pRoot;
while(cur || !s.empty()){
while(cur){
s.push(cur);
cur = cur->left;
}
// 访问根节点
cur = s.top();
s.pop();
cnt++;
if(cnt == k)
return cur;
cur = cur->right;
}
return NULL;
}

法二:

将所有的结点按中序遍历的顺序存入一个ArrayList, 最后取出 第 k 个元素即可
 import java.util.ArrayList;
public class Solution {
// 将所有的结点按中序遍历的顺序存入一个ArrayList, 最后取出 第 k 个元素即可
ArrayList<TreeNode> arr = new ArrayList<>();
TreeNode KthNode(TreeNode pRoot, int k)
{
if(pRoot == null)
return null;
inOrder(pRoot);
if(k >= && k <= arr.size()) // 如果 k 在 1 和 最大结点数之间
return arr.get(k - );
return null; // 说明 k 超过了节点数
} void inOrder(TreeNode root){
if(root != null){
inOrder(root.left);
arr.add(root);
inOrder(root.right);
}
}
}

剑指offer 62. 二叉搜索树的第 k 个结点的更多相关文章

  1. 剑指Offer 62. 二叉搜索树的第k个结点 (二叉搜索树)

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4. 例如, 5 / \ 3 7 / \ / \ 2 4 6 ...

  2. [剑指Offer] 62.二叉搜索树的第k个结点

    题目描述 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. [思路]遍历二叉搜索树,存入一个vector ...

  3. 【剑指Offer】二叉搜索树的第k个结点 解题报告(Python)

    [剑指Offer]二叉搜索树的第k个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  4. 剑指offer:二叉搜索树的第k个结点(中序遍历)

    1. 题目描述 /* 给定一棵二叉搜索树,请找出其中的第k小的结点. 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就 ...

  5. 【Java】 剑指offer(54) 二叉搜索树的第k个结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 给定一棵二叉搜索树,请找出其中的第k小的结点. 思路 设置全局变量 ...

  6. 力扣 - 剑指 Offer 54. 二叉搜索树的第k大节点

    题目 剑指 Offer 54. 二叉搜索树的第k大节点 思路1 二叉搜索树的特性就是中序遍历结果为递增序列,而题目要求的是第 k 大节点,所以就应该是要遍历结果为降序, 按照先遍历左子树.输出节点.遍 ...

  7. Go语言实现:【剑指offer】二叉搜索树的第k个的结点

    该题目来源于牛客网<剑指offer>专题. 给定一棵二叉搜索树,请找出其中的第k小的结点.例如,(5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. Go语言实现: ...

  8. 剑指offer——59二叉搜索树的第k大节点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4.   题解: 考察的就是中序遍历 不过注意进行剪枝 cl ...

  9. 每日一题 - 剑指 Offer 54. 二叉搜索树的第k大节点

    题目信息 时间: 2019-07-04 题目链接:Leetcode tag:二叉搜索树 中序遍历 递归 难易程度:中等 题目描述: 给定一棵二叉搜索树,请找出其中第k大的节点. 示例1: 输入: ro ...

随机推荐

  1. 使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)

    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频) 使用 TypeScript & mocha & chai 写测试代码实战 #1 ...

  2. 让我们纯手写一个js继承吧

    继承在前端逻辑操作中是比较常见的,今天我们就从零开始写一个js的继承方式 在es5中继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上Parent.call(this),在es6中则 ...

  3. CF round 623 Div.1D Tourism 题解

    题目链接:https://codeforces.com/contest/1314/problem/D 大意: \(n\) 个顶点的有向图,顶点编号为 \(1\) 到 \(n\),任意两个不同的顶点 \ ...

  4. SpringBoot导出excel数据报错Could not find acceptable representation

    转自:https://blog.csdn.net/mate_ge/article/details/93518286?utm_source=distribute.pc_relevant.none-tas ...

  5. MVC的App_Data中看不到数据库mdf文件

    点击运行后的页面去注册个账号,然后点击解决方案的‘显示所有文件就能看到了

  6. Linux中为什么执行自己的程序要在前面加./

    前言   在Linux中,我们执行内置命令时,直接输入命令名称即可,如: $ mv a b #将a重命名为b   而在执行自己写好的程序时,却要带上./,例如: $ hello hello: comm ...

  7. Visual Studio 2017中使用gulp编译sass/scss

    在Visual Studio 2017中使用gulp编译sass/scss文件 需要的环境:Visual Studio 2017.Node.js.npm 在vs2017中 [视图]-[其他窗口]-[任 ...

  8. shell awk学习3

    需求: 某文件aa的内容如下: a/p1/p2b/pp1c/ppp1/ppp3d/p1/p2/p3e/p1/p2/p3/p4 期望输出结果: a /p1 /p2 b /pp1 c /ppp1 /ppp ...

  9. Pwnable.kr

    Dragon —— 堆之 uaf 开始堆的学习之旅. uaf漏洞利用到了堆的管理中fastbin的特性,关于堆的各种分配方式参见堆之*bin理解 在SecretLevel函数中,发现了隐藏的syste ...

  10. burpsuite各个板块儿详细讲解

    burpsuite实战指南,想要的都在这里:https://t0data.gitbooks.io/burpsuite/content/