【发布时间】:2011-06-22 11:19:06
【问题描述】:
我已在互联网上搜索有关此问题的帮助,但我需要帮助。对于二叉树来说,这不完全是一个普通的插入问题,因为我们不能直接使用树结构本身。我的教授自己写了这个,并给了我们可以用来编写与二叉树有关的函数的函数。因此,我不能使用节点和指针之类的东西。这也是在 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。我实际上必须自己解决这个问题。你有什么具体问题吗?您的 start 看起来可能无法编译,因为您没有尝试分别传递给 tree_left 和 tree_right 的 left 或 right 变量。
-
它不是用来编译的。那正是我的大脑要去的地方。我完全被难住了。我已经在这个项目上工作了好几天,这是我需要编写的最后两个函数之一,所以我的大脑被炸了。我需要朝着正确的方向前进。
-
这是我见过的最恶心的 API 之一。你的教授声称那是 C++?
标签: c++ recursion tree binary-tree