我遇到了一个问题陈述
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;
}
}
这种做法是否正确? 谢谢 。
答案 0 :(得分:1)
这种方法是正确的,但是,doubleTree()
没有在问题陈述中处理each
这个词。它只加倍一个节点。
答案 1 :(得分:0)
不是不正确。您的代码仅向树添加一个节点。因此,它不会使树中的节点加倍,除非该树恰好只有一个节点。
顺便说一句,我会在做更多事情之前解决打印树问题的问题。如果无法打印树,如何检查其他问题的解决方案是否正确?
答案 2 :(得分:0)
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);
}
答案 3 :(得分:-1)
GDB场景:假设您被一家领先的软件公司聘为软件工程师,并分配了一个存储员工的任务。根据员工姓名按字母顺序记录。您的应用程序应允许按名称插入,删除和搜索记录。该公司主要关注的是对员工的记录进行有效搜索,以检查员工的表现。为此,二进制搜索是一个不错的选择。但是BST中存在一个问题,即它没有处理重复值,因为它的正式定义是“如果一个元素大于它的根,那么它将在它的右边;如果它小于它的根,它将在它的左侧“。此定义不处理重复值。但是,在给定的情况下,由于多个员工可能具有相同的名称,因此您的BST也应该能够处理重复的值。现在考虑一下,您可以使用以下选项更改BST定义以适应重复值: 如果一个元素大于root,它将在它的右侧,如果它小于root,它将在它的左侧;否则,它可能会在根的右侧或左侧。 使用每个节点的数组来存储重复的条目。
GDB问题:您的任务是分析在给定方案中使用BST定义中针对时间和内存的上述建议更改的成本和收益。