创建二叉搜索树的doubleTree()?

时间:2013-03-25 12:29:03

标签: c++ data-structures binary-tree 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; 
  }
}

这种做法是否正确? 谢谢 。

4 个答案:

答案 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定义中针对时间和内存的上述建议更改的成本和收益。