创建一个二叉搜索树的doubleTree()
Creating a doubleTree() of a Binary Search Tree?
我遇到了一个问题:
For each node in a binary search tree,
create a new duplicate node, and insert
the duplicate as the left child of the original node.
The resulting tree should still be a binary search tree.
http://cslibrary.stanford.edu/110/BinaryTrees.html 有一个解决方案,但我的解决方案不同。
void doubleTree(struct node* node) {
struct node* tempNode;
if (node->left == NULL)
{
node->left = new Node(node->data);
}
else{
tempNode = new Node(node->data);
tempNode->left = node->left;
node->left = tempNode;
}
}
这个方法正确吗?谢谢。
方法是正确的,但是,您的doubleTree()
不关心问题语句中的单词each
。它只复制一个节点
Not不正确。您的代码只向树添加一个节点。因此,它不会使树中的节点翻倍,除非该树恰好只有一个节点。
顺便说一句,我希望在做任何事情之前解决打印树的问题。如果你不能打印一棵树,你怎么能检查其他问题的解决方案是正确的呢?
void createDoubleTree(TreeNode t) {
if (t == null) {
return;
}
createDoubleTree(t.left);
TreeNode temp=t.left;
t.left=new TreeNode(t.k);
t.left.left=temp;
createDoubleTree(t.right);
}
void doubleTree() // public member function of BST class
{
doubleTree(root);
}
void doubleTree(BSTNode* s) // private member function of BST class
{
if(s)
{
doubleTree(s->left);
doubleTree(s->right);
BSTNode *t = new BSTNode;
t->data = s->data;
t->left = s->left;
t->right = 0;
s->left = t;
}
}
GDB场景:假设您被一家领先的软件公司聘为软件工程师,并分配了一项任务,根据员工姓名的字母顺序存储员工的记录。您的应用程序应该允许按名称插入、删除和搜索记录。公司主要关心的是对员工的记录进行有效的搜索,以检查员工的绩效。对于这种情况,二进制搜索是一个很好的选择。但是在BST中有一个问题,它不处理重复的值,因为它的正式定义是"如果一个元素大于它的根,它将在它的右边;如果它小于它的根,它就会向左移动。"这个定义不处理重复的值。但是,在给定的场景中,由于多个员工可能具有相同的名称,因此您的BST也应该能够处理重复的值。现在考虑一下,您有以下选项来更改BST定义以容纳重复的值:如果一个元素大于根元素,它将被放到右边,如果它小于根元素,它将被放到左边;否则,它可能会出现在根的右侧或左侧。对每个节点使用一个数组来存储重复的条目。
GDB问题:您的任务是分析在给定场景中使用上述BST定义中关于时间和内存的拟议更改的成本和收益。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 正在尝试重载二进制搜索树分配运算符
- 使用C++创建特殊的二叉搜索树
- 在递归二叉搜索树中搜索
- 在二叉搜索树中插入时出现分段错误
- C++二叉搜索树模板从函数返回节点
- 我可以在没有堆栈的情况下在二叉搜索树中实现迭代器吗?
- 在二叉搜索树C++中计算平均值
- 在字符串的二叉搜索树中搜索子字符串 - C++
- 在二叉搜索树中插入新元素
- 如何打印在二叉搜索树中找到的数据?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 这是一个二叉搜索树吗?黑客排名问题
- 二叉搜索树 - 实现"search"函数
- 二叉搜索树的 C++ 实现中的EXC_BAD_ACCESS错误
- 删除二叉搜索树 (C++) 中的单个元素
- 将值存储在带有C++的二叉搜索树中
- 二叉搜索树未将插入值加载到树中
- 二叉搜索树使用最常用的节点来打印出某些语句
- 创建一个二叉搜索树的doubleTree()