每天一道LeetCode-----寻找二叉搜索树中第k小的元素
来源:互联网 发布:单片机延时流程图 编辑:程序博客网 时间:2024/06/05 06:01
Kth Smallest Element in a BST
原题链接Kth Smallest Element in a BST
给顶一个二叉搜索树的根节点,找到这棵数第k小的值
两种方法
- 递归法的中序遍历
- 迭代法的中序遍历
递归法,常规的中序遍历
代码如下
/** * 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 res = 0; inOrder(root, k, res); return res; }private: void inOrder(TreeNode* root, int& k, int& res) { if(!root || !k) return; inOrder(root->left, k, res); //找到k个数即可 if(--k == 0) res = root->val; inOrder(root->right, k, res); }};
迭代法,用栈实现
/** * 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) { stack<TreeNode*> s; pushAllLeft(root, s); TreeNode* top = nullptr; while(k--) { top = s.top(); s.pop(); //每弹出一个节点就将该节点的右子树的左边一列入栈 pushAllLeft(top->right, s); } return top->val; }private: void pushAllLeft(TreeNode*root, stack<TreeNode*>& s) { while(root) { s.push(root); root = root->left; } }};
本题主要考察中序遍历,除了递归法最好可以熟悉迭代法的求解
阅读全文
0 0
- 每天一道LeetCode-----寻找二叉搜索树中第k小的元素
- 每天一道LeetCode-----实现二叉搜索树的迭代器
- 寻找二叉搜索树的第K小的节点
- 每天一道LeetCode-----寻找地增序列中第一个大于等于目标元素的位置
- 每天一道LeetCode-----判断某棵树是否是二叉搜索树
- 每天一道LeetCode-----生成由[1 : n]这n个数组成的所有二叉搜索树
- 每天一道LeetCode-----二叉搜索树的某两个节点被交换位置,修正这个二叉搜索树
- [LeetCode题解]从两个有序数组的并集中寻找第k小元素
- 寻找第k小元素
- Kth Smallest Element in a BST 找二叉搜索树中的第k小的元素
- 每天一道LeetCode-----将数组/链表后k个元素移动到前面
- 每天一道LeetCode-----找到1,2,...,n这n个数所有的组合,每个组合有k个元素,且元素大小递增
- 寻找第k小的元素C语言
- 寻找数组中的第k小的元素
- 【leetcode】——从两个有序数组中寻找他们并集的第k小元素
- 寻找第k小的元素或者第k大的元素 -- O(n)
- 寻找前k大元素或者前k小元素
- 分治法 寻找第K小元素
- 自定义view——叶子loading
- django全文搜索学习心得
- 操作系统实验4
- iOS navigationbar push的时候出现闪色问题?
- FunctionBay.RecurDyn.v9R1.Win64.&.Linux64 1DVD
- 每天一道LeetCode-----寻找二叉搜索树中第k小的元素
- (A4,二)java数据交换格式---Xml详解
- 收录文档
- Maven pom.xml 配置详解
- svn用法
- JavaWeb自主学习--JavaScript(三),day4
- es6 字符串模板 随手记
- 获得WIN7管理员权限(可通过修改注册表,或者组策略改变)
- [随笔] docker上使用nginx进行负载均衡示例