Я пробовал Интернет за помощью по этой проблеме, но мне нужна помощь. Это не совсем обычная проблема вставки для двоичного дерева, поскольку мы не можем напрямую работать с самой древовидной структурой. Мой профессор написал это сам и дал нам функции, которые мы можем использовать для написания функций, относящихся к бинарным деревьям. Таким образом, я не могу использовать узлы и указатели и все. Также это в C++.Вставка двоичного дерева (отсортировано)
В любом случае, вот описание рекурсивной функции, которую я должен написать (вместе с моей попыткой начать работу с проблемой). Обратите внимание, что он возвращает новое дерево целиком, но фактически ничего не добавляет к существующему дереву.
tree_t insert_tree(int elt, tree_t tree)
{
/*
// REQUIRES; tree is a sorted binary tree
// EFFECTS: returns a new tree with elt inserted at a leaf such that
// the resulting tree is also a sorted binary tree.
//
// for example, inserting 1 into the tree:
//
// 4
// / \
// / \
// 2 5
// /\ /\
// 3
// /\
//
// would yield
// 4
// / \
// / \
// 2 5
// /\ /\
// 1 3
// /\/\
//
// Hint: an in-order traversal of a sorted binary tree is always a
// sorted list, and there is only one unique location for
// any element to be inserted.
*/
if (elt < elt(tree_left(tree)){
return insert_tree(tree_left(left));
} else {
return insert_tree(tree_right(right));
}
}
А вот функции, которые мы можем использовать:
extern bool tree_isEmpty(tree_t tree);
// EFFECTS: returns true if tree is empty, false otherwise
extern tree_t tree_make();
// EFFECTS: creates an empty tree.
extern tree_t tree_make(int elt, tree_t left, tree_t right);
// EFFECTS: creates a new tree, with elt as it's element, left as
// its left subtree, and right as its right subtree
extern int tree_elt(tree_t tree);
// REQUIRES: tree is not empty
// EFFECTS: returns the element at the top of tree.
extern tree_t tree_left(tree_t tree);
// REQUIRES: tree is not empty
// EFFECTS: returns the left subtree of tree
extern tree_t tree_right(tree_t tree);
// REQUIRES: tree is not empty
// EFFECTS: returns the right subtree of tree
extern void tree_print(tree_t tree);
// MODIFIES: cout
// EFFECTS: prints tree to cout.
я хочу, чтобы я знал о StackOverflow в мой первый год в уни. Я действительно должен был понять это для себя. есть ли у вас конкретная проблема? ваш старт выглядит так, как будто он не компилируется, поскольку нет левых или правых переменных, которые вы пытаетесь передать в tree_left и tree_right соответственно. – Joe
Это не предназначено для компиляции. Вот где мой мозг идет. Но я все еще в тупике. Я работаю над этим проектом в течение нескольких дней, и это одна из последних двух функций, которые мне нужно написать, чтобы мой мозг был обжарен. Мне нужен толчок в правильном направлении. – Slims
Это один из самых отвратительных API, которые я когда-либо видел. Ваш профессор утверждает, что это C++? – Puppy