我的教授在期末考试中发布了一些评论问题。我似乎无法找到它的答案。任何帮助将不胜感激!
考虑n个节点的二叉树:
一个。叶节点的最小和最大数量是多少?
湾高度的最小值和最大值是多少?
C。树使用了多少指针(不计算空指针,假设我们没有保存存储父节点的字段)?
* d。将n个节点插入(最初为空)二进制搜索树的最差护理运行时间是多少?
答案 0 :(得分:2)
答案 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秒内学会。
我希望这会有所帮助。祝你的考试好运!几个月前我有我的。 ;)