leetcode--Kth Smallest Element in a BST
来源:互联网 发布:软件行业 技术规范 编辑:程序博客网 时间:2024/05/01 14:47
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST’s total elements.
Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
Hint:
Try to utilize the property of a BST.Show More Hint
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
两种思路:
1.空间换时间
BST的特性是,如果按照中序排列,得到的递增序;所以可以使用一个stack进行中序遍历,直到找到第K个元素;
2. 树树的结点数
对于每个节点root,计算以它为根节点的树的节点数,计作S。
如果S==K,返回root->val;
如果S > K,在root的左子树里面查找第K小元素;
如果S
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public int kthSmallest(TreeNode root, int k) { Stack<TreeNode> s = new Stack<>(); TreeNode p=root; s.push(p); int cnt=0; do{ while(p!=null){ s.push(p); p=p.left; } TreeNode top=s.pop(); cnt++; if(cnt==k){ return top.val; } p=top.right; }while(!s.empty()); return 0; }}
思路2代码:
/** * 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 kthSmallest(TreeNode* root, int k) { int left=findNodesSum(root->left); if(left+1==k){ return root->val; }else if(left+1<k){ return kthSmallest(root->right,k-left-1); }else{ return kthSmallest(root->left,k); } } int findNodesSum(TreeNode* root){ if(!root){ return 0; } int sum = findNodesSum(root->left)+findNodesSum(root->right)+1; return sum; }};
自己的个人博客: bingtel-木犹如此的博客, 有兴趣可以关注下。
1 0
- #leetcode#Kth Smallest Element in a BST
- leetcode--Kth Smallest Element in a BST
- Leetcode|Kth Smallest Element in a BST
- [leetcode] Kth Smallest Element in a BST
- 【LeetCode】Kth Smallest Element in a BST
- LeetCode Kth Smallest Element in a BST
- 【leetcode】Kth Smallest Element in a BST
- LeetCode Kth Smallest Element in a BST
- leetcode: Kth Smallest Element in a BST
- Leetcode: Kth Smallest Element in a BST
- [LeetCode] Kth Smallest Element in a BST
- [LeetCode]Kth Smallest Element in a BST
- [Leetcode]Kth Smallest Element in a BST
- leetcode--Kth Smallest Element in a BST
- 【leetcode】Kth Smallest Element in a BST
- [leetcode] Kth Smallest Element in a BST
- [Leetcode]Kth Smallest Element in a BST
- Leetcode: Kth Smallest Element in a BST
- android5.1 FrameLayout源码浅析
- error: command 'x86_64-linux-gnu-gcc' failed with exit status 1” in virtualenv
- 剖析Disruptor:为什么会这么快?(一)Ringbuffer的特别之处
- 循环赛事、对称矩阵
- 整理下混乱的生活
- leetcode--Kth Smallest Element in a BST
- H.264视频数据组织结构-GOP图像组和组中3类不同的图像帧
- Linux系统lseek函数作用
- 出自国外某牛人的一道面试题(About 42)
- 【Leetcode Algorithm】Remove Element
- c++ stl资源--qsort排序
- 【Leetcode Algorithm】Implement strStr()
- POJ 1163 The Triangle
- java学习07--运算符:三元运算符