【问题标题】:Finding middle element of std::list<string>?查找 std::list<string> 的中间元素?
【发布时间】:2019-04-12 16:08:42
【问题描述】:

我得到了一个字符串列表,我想找到中间元素。 我想要这个中间元素,因为我正在从这个列表中构造一个二叉搜索树,使用中间元素作为根节点。

如何找到标准列表的中间元素,以便递归调用左侧和右侧来生成树?除了这一部分,我了解 BST 的一切。

【问题讨论】:

  • 您将从编写您知道如何编写的最佳代码开始,然后查看它是否有效。如果它不起作用,那么您将在此处发布它,并附上对某人无法帮助您解决特定问题的说明。
  • 您还应该检查您的列表是否包含奇数个值...否则无法找到 中间元素(这将是两个中间元素)
  • @Ruks 好吧,取决于您使用的 c++ 版本,这可能是在单独的步骤中进行的反优化,因为 std::list::size() 并不总是被要求为 O(1)。如果这不是一个单独的步骤,那么您会在找到中间元素的同时找出是否有偶数/奇数...en.cppreference.com/w/cpp/container/list/size
  • 显而易见的答案是:auto mid = std::next(l.begin(), l.size() / 2);(当然,如果l.size() 是偶数,它会从两者中随机选择一个)。
  • @xaxxon:当然。该标准不是特定版本。这些标签并不表示正在使用过时的 C++ 版本。

标签: c++ list binary-search-tree stdlist


【解决方案1】:

您可以使用size(),然后将其除以 2 并存储在一个整数中。稍后,如果您想要左侧或右侧,只需获取该数字并添加 -1 或 +1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    相关资源
    最近更新 更多