【问题标题】:AVL tree inside an AVL tree in C++C++ 中 AVL 树内的 AVL 树
【发布时间】:2015-04-24 06:24:38
【问题描述】:

我需要实现一个 AVL 树,每个节点都有一个 AVL 树。概念是您从 e 文件中获取一些链接,例如

 ID   LinksTO
 0      0
 0      1
 0      2
 0      3
 1      0
 1      4
 1      6

等等。

我设法实现了一个存储 ID 的 AVL 树,但我们还需要将每个 ID 的链接存储在 AVL 树中。 最好的方法是什么?是否有一个节点指针显示到带有连接的 AVL 树的根?

   class node 

  {   public:
        int ht;
        int conNum=0;
        int data;
        node *left,*right , *connections;


   };

或者可能是类节点中的 AVL 对象?不知道这在 C++ 中是否可行

  {   public:
        int ht;
        int conNum=0;
        int data;
        node *left,*right;
        AVLtree connections;


   };

假设所有方法都可以从 AVL 树中正常工作,这怎么可能?

   class AVL{

     node *root;
     int height(node*);
     node *rotate_right(node*);
     node *rotate_left(node*);
     node *RR(node*);
     node *LL(node*);
     node *LR(node *);
     node *RL(node *);
     int BF(node*);
public:
     AVL(){
         root=NULL;
     }

     node *insert(node*,int);
     node *delet(node*,int);
     void inorder(node*,ostream&);

};

【问题讨论】:

  • 通常编译器会告诉你在语法上什么是可能的。你的方法有什么特别的问题吗?
  • 其实问题不在于语法。我不知道如何以及何时开始为连接构建子树。有什么想法吗?

标签: c++ tree


【解决方案1】:

我不确定,您要实现什么,如果我理解正确,请告诉我:您想要创建一个 AVL 树,其中包含 ID,并且该树的每个节点都包含该节点的 ID 的 AVL 树ID链接到? 好吧,在我看来,您可以通过两种方式做到这一点:

1) 有一个指向此 ID 链接到的节点的指针的 AVL 树。 这意味着您必须向树的每个节点添加另一个指向节点的指针。 该附加指针将链接到包含节点的树,该节点包含指向包含所需链接 ID 的主树节点的指针。

2) 有一个此 ID 链接到的 ID AVL 树。 这可以正常工作,但是当您想知道链接 ID 的链接 ID 时,您会遇到问题 - 如果不搜索整个树,您将无法轻松做到。

最后,第一个解决方案需要更多时间来添加节点,但会为您提供更好的导航。第二棵树的构建速度更快,但深度导航非常昂贵。

【讨论】:

  • 这正是我想要实现的。因为 ID 大约是 300k,而且它们的链接不是很多,所以我认为导航没什么大不了的。 (一个 id 不应该有超过 100 个链接)。但在这种情况下,我将不得不建立大约 30 万棵 avl 树,对吗?所以我真的很困惑什么是最好的方法。
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多