二叉搜索树

时间:2011-05-24 17:27:07

标签: tree binary-tree binary-search-tree binary-search

我的教授在期末考试中发布了一些评论问题。我似乎无法找到它的答案。任何帮助将不胜感激!

考虑n个节点的二叉树:
一个。叶节点的最小和最大数量是多少? 湾高度的最小值和最大值是多少?
C。树使用了多少指针(不计算空指针,假设我们没有保存存储父节点的字段)?

* d。将n个节点插入(最初为空)二进制搜索树的最差护理运行时间是多少?

4 个答案:

答案 0 :(得分:2)

  • 最大叶数是ceil(n / 2)。最小数量为1
  • 最大高度为n。最小值是楼层(log_2(n))

答案 1 :(得分:0)

尝试在纸上绘制各种树木,看看你得到了什么。请记住,二叉树被定义为一个树,其中每个节点可能有0(在这种情况下它是一个叶子),1或2个子节点。对于你的问题,你应该检查每个节点1个孩子的非常不平衡的情况。

答案 2 :(得分:0)

考虑:

如果您尝试最大化叶子数量,则需要尽可能少的内部节点(如果您尝试最小化叶子数量则相反)。你怎么能做到这一点?

要获得最大高度的树,您将在每个级别中放置尽可能少的节点。你怎么能这样做?相反,对于最小高度,每个级别可以放置的最大节点数是多少?

有多少种方法可以到达树的每个节点?那么,你需要多少指针?

答案 3 :(得分:0)

我假设您要么使用C或C ++进行编码。

一个。一个节点,如果结构定义如下: struct node {struct node * left,* right; }; 您可以观察到结构可以有0,1或2个叶子。所以,最大值是2,min是0叶子。

b.Minimal height为零,其中只包含根节点。请注意,根节点不计为高度1.它有时也称为深度。 这是一个高度算法:

    int height(struct node *tree) 
    { 
    if (tree == NULL) return 0;
    return 1 + max (height (tree->left), height (tree->right)); 
    }

了解详情:http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL

℃。原谅我,如果我采取这种方式,但我假设如果我们在一张纸上绘制出来,我们会试图找到我们将使用的“链接”的数量?在这种情况下,它只是根节点中树的节点数-1。在此页面上找到的此算法http://forums.techarena.in/software-development/1147688.htm可以帮助您:检查root是否为null,然后将左右节点作为参数传递给函数。

int countnodes(Node* root)
{
    if (root == null || k<=0)
    {
      return 0;
    } else {
        return 1 + count(root.left,k-1) + count(root.right,k-1);
    }
}
// remember to subtract one at the end.
int totalnodes = countnodes(root) - 1;

d。最佳情况的时间复杂度为O(nlogn),其中n是要插入的节点数。最坏的情况是O(n)。它是直接线性的。

如果你有任何其他问题只是谷歌它,有很多关于二元搜索树的事情。但大部分都是简单的递归,你可以在30秒内学会。

我希望这会有所帮助。祝你的考试好运!几个月前我有我的。 ;)