我被要求实现一个AVL树,我做到了 - 现在它适用于我能想到的所有压力测试。现在我看到我们被建议实现它,它继承自二叉树继承的二叉搜索树。我想它是正确的 - 我很乐意得到关于哪些不变量(必须出现的字段)应该出现在每个变量(二叉树,搜索和AVL)中的建议。 谢谢! 这是我的实现:
答案 0 :(得分:2)
我会给你一些提示。在编写面向对象的代码时,我发现自上而下设计很有用 - 即实现父类,然后继承并决定需要添加/覆盖的内容。
示例:
二叉树:
所有这些都是二叉树的一般属性。你可以拿出更多(打印用于调试用途......)。我们继承了所有这些,并从:
开始二进制搜索树
最后,您继承此项以生成 AVL 树。尝试并考虑可以继承的内容,需要完全覆盖的内容,以及在调用基类之前需要做些什么工作。你可以google / wikipedia进行常见的树操作(例如我没有提到删除)。祝你好运。
修改强>
AS davmac提到,AVL的节点发生了变化 - 它需要一个额外的字段!我们有两个孩子,我们继承了数据字段,但现在我们还需要一个平衡因子。这是何时添加字段的示例。