LeetCode 230. 二叉搜索树中第 K 小的元素
题目描述
给你一个单链表的头节点 head
,请你判断该链表是否为回文链表。如果是,返回 true
;否则,返回 false
。
示例
示例 1:
输入:root = [3,1,4,null,2], k = 1 输出:1
示例 2:
输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3
解法
1.辅助数组
解题思路
创建一个数组,中序遍历链表,把二叉树中的元素依次加入数组中,由于二叉搜索树性质,得到的数组是非减的,这样就可以直接返回第K小的元素。
class Solution {
public: int kthSmallest(TreeNode* root, int k) {vector <int> temp;Helper(root,temp);return temp[k - 1];}void Helper(TreeNode* root,vector <int>& temp){if(!root) return;Helper(root -> left,temp);temp.push_back(root -> val);Helper(root -> right,temp);return;}
};
时间复杂度O(N),空间复杂度O(N)
2.计数法
解题思路:
如果要求不占用额外空间,则我们需要设计一个计数器,计数器达到k时,立马返回节点的值。
class Solution {
public: int count = 0;int kthSmallest(TreeNode* root, int k) {int ans;Helper(root,ans,k);return ans;}void Helper(TreeNode* root,int &ans,int k){if(!root) return;Helper(root -> left,ans,k);count ++;if(count == k){ans = root -> val;return;}Helper(root -> right,ans,k);}
};
时间复杂度O(N),空间复杂度O(1)