C++ 二叉搜索树-制作字典

C++ 二叉搜索树-制作字典,c++,c,binary-tree,C++,C,Binary Tree,我想用BST制作一本字典,但我不知道如何将它们存储在树中 struct node { char word[50]; char meaning[256]; struct node *left, *right; }; 我是这样开始的,但我不知道该把哪些单词放在左边,哪些放在右边…通常,词汇上比当前节点中的单词小的单词向左移动,其余的向右移动。使用通常,词汇上比当前节点中的单词小的单词向左移动,其余单词向右移动。使用哪些单词向左放置,哪些单词向右放置仍然遵循BST

我想用BST制作一本字典,但我不知道如何将它们存储在树中

struct node
   {
    char word[50];
    char meaning[256];
    struct node *left, *right;
   };

我是这样开始的,但我不知道该把哪些单词放在左边,哪些放在右边…

通常,词汇上比当前节点中的单词小的单词向左移动,其余的向右移动。使用
通常,词汇上比当前节点中的单词小的单词向左移动,其余单词向右移动。使用
哪些单词向左放置,哪些单词向右放置仍然遵循BST的基本规则:给定根左边的所有节点都保证小于该根的值,而给定根右边的所有节点都保证大于或等于该根的值

把同样的原则应用到你的字典上。我不知道你是用C还是C++,但是如果你使用C++,我建议做一个“Word”结构,重载它的相等运算符。然后在“node”结构中,只需要一个单词、一个左节点和一个右节点


不过,BST并不是字典数据结构的最佳选择。我会研究不同类型的映射和散列。

哪些单词应该放在左边,哪些单词应该放在右边仍然遵循BST的基本规则:给定根左边的所有节点都保证小于该根的值,并且给定根右边的所有节点都保证大于或等于该根的值

把同样的原则应用到你的字典上。我不知道你是用C还是C++,但是如果你使用C++,我建议做一个“Word”结构,重载它的相等运算符。然后在“node”结构中,只需要一个单词、一个左节点和一个右节点



不过,BST并不是字典数据结构的最佳选择。我会研究不同类型的映射和散列。

您应该使用类似于。BST实际上更适用于“大于/小于”关系,这很难用文字来表示。在后缀树中,节点是字符,分支最终指向表示实际单词的叶子

您应该使用类似于。BST实际上更适用于“大于/小于”关系,这很难用文字来表示。在后缀树中,节点是字符,分支最终指向表示实际单词的叶子

这是家庭作业吗?如果没有,请使用
std::map
。这是家庭作业吗?如果没有,请使用
std::map
。另外,不要使用任何类型的树,只使用哈希映射!永远!映射到单词有多困难?我认为字典排序很好。@Brian Gordon:当你想让字典按顺序排序时..?是的,hashmaps(甚至SkipList)是非常有效的数据结构。我想,如果他在为字典寻找一个树实现,这个可能比BST更合适。我只是建议一个替代的树结构,不一定要忽略其他数据结构类型。@Manny,我认为BST也适合,因为我们可以正确地比较dict的键,然后将它们存储在BST中。我说的对吗?另外,不要使用任何类型的树,只使用哈希映射!永远!映射到单词有多困难?我认为字典排序很好。@Brian Gordon:当你想让字典按顺序排序时..?是的,hashmaps(甚至SkipList)是非常有效的数据结构。我想,如果他在为字典寻找一个树实现,这个可能比BST更合适。我只是建议一个替代的树结构,不一定要忽略其他数据结构类型。@Manny,我认为BST也适合,因为我们可以正确地比较dict的键,然后将它们存储在BST中。我说的对吗?好的,但它是排序的,我应该如何制作根元素,它是第一个单词,然后树将变得不平衡?谁说树需要平衡?当你在树上添加单词时,它自然会变得不平衡。如果愿意,您可以稍后使用不同的技术对其进行重新平衡,但让树从一开始就不平衡并不是一个错误条件。如果在插入之前对您使用的字典进行了排序,那么最终将使用线性搜索O(N)而不是O(log(N)),这从本质上否定了BST的任何好处,这是一个家庭作业,所以效率不是最大的问题,但它值得知道。如果你对平衡树感兴趣,看看2-3棵树/红黑树。但这超出了你的实际任务。好吧,但它是排序的,根元素应该是什么,它是第一个单词,然后树会变得不平衡?谁说树需要平衡?当你在树上添加单词时,它自然会变得不平衡。如果愿意,您可以稍后使用不同的技术对其进行重新平衡,但让树从一开始就不平衡并不是一个错误条件。如果在插入之前对您使用的字典进行了排序,那么最终将使用线性搜索O(N)而不是O(log(N)),这从本质上否定了BST的任何好处,这是一个家庭作业,所以效率不是最大的问题,但它值得知道。如果你对平衡树感兴趣,看看2-3棵树/红黑树。是的,但是如果我把第一个单词作为根,意思是以A开头的单词,那么树就会变得不平衡。这就是BST的工作原理。如果您已经对输入BST的数据进行了排序,那么您只是在创建一个美化的链接列表。我建议使用HashMap。好的,只是一个简单的问题,让我说“公平”使用例如第13个字符作为根?如果你绝对需要使用BST,那么我会随机添加字典中的单词。但是,选择一个随机元素是公平的