二叉搜索树中第K小的元素

匿名 (未验证) 提交于 2019-12-02 23:34:01

二叉搜索树中第K小的元素

LeetCode中文

LeetCode英文

给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明

你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:

输入: root = [3,1,4,null,2], k = 1    3   / \  1   4   \    2 输出: 1 

示例 2:

输入: root = [5,3,6,2,4,null,null,1], k = 3        5       / \      3   6     / \    2   4   /  1 输出: 3 

进阶

如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化kthSmallest 函数?

解答

中序遍历二叉搜索树,在遍历的过程中,每经过一个节点将k减1,当k == 0的时候,则找到了第k小的元素(注意边界)。

C++代码

/**  * 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:     void recursion(TreeNode* root,int& res,int& k)     {         if(!root)             return;                  recursion(root->left,res,k);                  k--;         if(k == 0)         {             res = root->val;             return;         }                      recursion(root->right,res,k);     }          int kthSmallest(TreeNode* root, int k) {         int res;         recursion(root,res,k);                  return res;     } }; 

Python代码

# Definition for a binary tree node. # class TreeNode: #     def __init__(self, x): #         self.val = x #         self.left = None #         self.right = None  class Solution:     def kthSmallest(self, root: TreeNode, k: int) -> int:         self.k = k         self.inorder(root)         return self.res              def inorder(self,root) -> bool:         if root is None:             return False                  if self.inorder(root.left):             return True                      self.k -= 1         if self.k == 0:             self.res = root.val             return True                      if self.inorder(root.right):             return True                  return False                   
文章来源: https://blog.csdn.net/xie810005152/article/details/90312356
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!