给定一个二叉搜索树,编写一个函数 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
函数?
C#代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution {
public int KthSmallest(TreeNode root, int k) {
int val = 0;
int index = 0;
var stack = new Stack<TreeNode>();
while (root != null || stack.Count > 0){
/*指针root指向二叉树入栈,入栈后指针指向入栈二叉树的左子树*/
while(root != null){
stack.Push(root);
root = root.left;
}
/*出栈,并将指针root指向出栈二叉树的右子树*/
root = stack.Pop();
index += 1;
val = root.val;
if(index == k) break;
root = root.right;
}
return val;
}
}