gpt4 book ai didi

c++ - 二叉树插入(按顺序排序)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:16 29 4
gpt4 key购买 nike

我已在互联网上搜索有关此问题的帮助,但我需要帮助。这不完全是二叉树的普通插入问题,因为我们不能直接处理树结构本身。我的教授自己写的,并给了我们可以用来编写与二叉树相关的函数的函数。因此,我不能使用节点和指针之类的东西。这也是在 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.

最佳答案

插入零元素树很容易:

return tree_make(elt, tree_make(), tree_make());

插入单元素树也很容易:

tree_t new_node = tree_make(elt, tree_make(), tree_make());
if(elt < tree_elt(tree))
return tree_make(tree_elt(tree), new_node, tree_right(tree));
else
return tree_make(tree_elt(tree), tree_left(tree), new_node);

一般来说,要插入一个新元素,您需要以这种方式重新创建它的所有父元素。


第 2 部分:递归

我们有基本情况(零元素树)。我们知道如何将新子树附加到现有树的根。

那么如何获取新的子树呢?那么,我们将元素插入当前子树怎么样?

下面的代码总是将新元素附加到树的最左边,但是一旦你理解了它应该很容易纠正:

tree_t tree_insert(int elt, tree_t tree)
{
if(tree_empty(tree)) //base case
return tree_make(elt, tree_make(), tree_make());
else
return tree_make( // make a new node
tree_elt(tree) // with the same value as the current one
tree_insert(elt, tree_left(tree)) //insert into the left subtree
tree_right(tree) // keep the right subtree the same
);
}

关于c++ - 二叉树插入(按顺序排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917086/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com