230. Kth Smallest Element in a BST
Дан корень бинарного дерева поиска и số nguyên k. return k-ое по величине значение (нумерация с 1) среди всех значений узлов в дереве.
Ví dụ
Input: root = [3,1,4,null,2], k = 1
Output: 1
C# lời giải
đã khớp/gốcpublic class Solution {
public int KthSmallest(TreeNode root, int k) {
Stack<TreeNode> stack = new Stack<TreeNode>();
while (true) {
while (root != null) {
stack.Push(root);
root = root.left;
}
root = stack.Pop();
if (--k == 0) return root.val;
root = root.right;
}
}
}
C++ lời giải
bản nháp tự động, xem lại trước khi gửi#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int KthSmallest(TreeNode root, int k) {
stack<TreeNode> stack = new stack<TreeNode>();
while (true) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if (--k == 0) return root.val;
root = root.right;
}
}
}
Java lời giải
đã khớp/gốcclass Solution {
public int kthSmallest(TreeNode root, int k) {
LinkedList<TreeNode> stack = new LinkedList<>();
while (true) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if (--k == 0) return root.val;
root = root.right;
}
}
}
JavaScript lời giải
đã khớp/gốcclass Solution {
kthSmallest(root, k) {
let stack = []
while (true) {
while (root !== null) {
stack.push(root)
root = root.left
}
root = stack.pop()
if (--k === 0) return root.val
root = root.right
}
}
}
Python lời giải
đã khớp/gốcclass Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
stack = []
while True:
while root:
stack.append(root)
root = root.left
root = stack.pop()
k -= 1
if k == 0:
return root.val
root = root.right
Go lời giải
đã khớp/gốcfunc kthSmallest(root *TreeNode, k int) int {
stack := []*TreeNode{}
for {
for root != nil {
stack = append(stack, root)
root = root.Left
}
root = stack[len(stack)-1]
stack = stack[:len(stack)-1]
k--
if k == 0 {
return root.Val
}
root = root.Right
}
}
Algorithm
Инициализация стека и обход в глубину: Инициализируйте стек для хранения узлов дерева. Начните обход дерева в глубину, начиная с корня, и перемещайтесь влево, добавляя каждый узел в стек, пока не достигнете самого левого узла.
Извлечение узлов и проверка: Когда достигнете самого левого узла, извлеките узел из стека и уменьшите значение k на 1. Если k становится равным нулю, return значение текущего узла, так как это и есть k-ое по величине значение.
Переход к правому поддереву: Если k не равен нулю, переместитесь к правому поддереву текущего узла и продолжайте обход, повторяя шаги 1 и 2, пока не найдете k-ое по величине значение.
😎
Vacancies for this task
việc làm đang hoạt động with overlapping task tags are đã hiển thị.