[leetcode 230]Kth Smallest Element in a BST----求二叉搜索树的第K小值
2016-03-09 21:51
417 查看
Question:
Given a binary search tree, write a function
smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
分析:
题目是给定一个二叉搜索树,求写一个函数找到这个二叉搜索树的第K小的元素值。
1、暴力法:
对二叉搜索树进行中序遍历,并将结果存在vector中,则vector[k-1]即为所求。
2、计数法:
根据二叉搜索树的特点可以知道,根节点左边都是比根节点小的值,根节点右边的值都是比根节点大的,所以也是中序遍历,只不过不存储遍历结果,只统计访问过的节点次数。这样,当访问第k个节点时候,第k个节点的元素值即为所求。
代码如下:
Given a binary search tree, write a function
kthSmallestto find the kth
smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
分析:
题目是给定一个二叉搜索树,求写一个函数找到这个二叉搜索树的第K小的元素值。
1、暴力法:
对二叉搜索树进行中序遍历,并将结果存在vector中,则vector[k-1]即为所求。
2、计数法:
根据二叉搜索树的特点可以知道,根节点左边都是比根节点小的值,根节点右边的值都是比根节点大的,所以也是中序遍历,只不过不存储遍历结果,只统计访问过的节点次数。这样,当访问第k个节点时候,第k个节点的元素值即为所求。
代码如下:
<span style="font-size:14px;">/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int t; int r; int count; public: int kthSmallest(TreeNode* root, int k) { t = k; count = 0; Inorder(root); return r; } void Inorder(TreeNode* root){ if(root->left != NULL){ Inorder(root->left); } ++count; if(count == t){ r = root->val; return ; } if(root->right != NULL){ Inorder(root->right); } } };</span>
相关文章推荐
- Phpcms v9 审核文章功能只能超级管理员审核吗?
- S7-200 SMART的强制值问题
- POJ 2392 Space Elevator 背包题解
- 一致性哈希算法(consistent hashing)(转)
- Atitit.木马病毒自动启动-------------win7计划任务的管理
- bzoj2456 mode 有点思考难度
- LightOJ 1245 - Harmonic Number (II) (求n/1+n/2+n/2+....+n/n)
- java线程5 volatile和synchronized关键字 .
- 异步通知与异步I/O
- 反转链表
- POJ 2533
- BZOJ-2049 Cave洞穴勘测 动态树Link-Cut-Tree (并查集骗分TAT)
- Atitit.木马病毒自动启动-------------win7计划任务的管理
- 程序员面试金典(排序与查找):变位词排序(java解法)
- 痛苦的并行之路----MATLAB工具箱安装
- mysql-5.7.11-winx64.zip的解压缩安装
- C#使用linq to xml完成对XML文件的创建、增加、删除、修改、查询
- 证书问题、刷新自定义view实例
- 如何使用redis做mysql的缓存
- BZOJ-2049 Cave洞穴勘测 动态树Link-Cut-Tree (并查集骗分TAT)