Предположим, что в данном двоичном дереве , если каждый узел содержит количество дочерних элементов , каков оптимальный способ найти k-й наименьший элемент в дереве?это не обычный BST.Каждый узел содержит номер дочернего элемента под ним.
find_element(root, k) if(root.left.nchildren + 1 == k - 1) return root; if(root.left.nchildren + 1 >= k) return find_element(root.left, k) else return find_element(root.right, k - (root.left.children + 1))
Обход BST в InOrder Обход и сохранение элементов в массиве.Ваш массив является отсортированным массивом.
Вот что я получил:
find (root, k) { leftChildCount = root->left->n rightChildCount = root->right->n if (leftChildCount+1 == k) Print root node else if (k< leftChildCount) Find(root->left,k) else Find(root->right,k-leftChildCount) }