【问题标题】:What will be the most optimized position of a node in a binary tree with given specifications?给定规格的二叉树中节点的最优化位置是什么?
【发布时间】:2017-05-11 13:41:12
【问题描述】:

假设我有一棵二叉树,其中一个节点可以有 0,1 或 2 个子节点。每个节点都有一个成本值,它可以是{5,10,20,40}。新节点的最佳放置是在具有相同或更低成本值的节点下。例如,成本值为 20 的新节点最好放在成本值为 20 的节点下,但也可以放在成本值为 5 和 10 的节点下。

该算法的主要要求是完成一个节点的左右孩子如果需要的话,即如果一个成本值为10的节点有一个成本值为10的左孩子,那么一个新的成本值为10的节点将成为上述节点的右孩子。次要要求是最大化树的整体深度。

树不能在任何时间点重新排列。如果传入节点的价值较小,则不涉及惩罚。 鉴于上述要求,我们如何确定传入新节点在树中的最佳位置?我们可以为它写一个通用的算法吗?

最初,我想先完成树的每个级别,但我认为这不是最佳选择。

【问题讨论】:

  • 对问题的描述不清楚/不完整 例如,如果要处理的第一个节点是 40,而下一个要处理的节点是 5,会发生什么情况?有罚款吗?还是允许您“拆除”树并重新排列?如果是后者,对时间复杂度有要求吗?
  • 按要求添加了一些细节

标签: algorithm optimization tree


【解决方案1】:

次要要求是最大化树的整体深度。

这有点不寻常。

最快的方法:

  1. 对输入值进行排序
  2. 根据第一个要求填充所有最小值节点(5's)(仍然不清楚在下降一个级别之前是否必须填充左右两个节点。如果它必须那么最大值深度将为 log2(N5) 如果允许“向左深入”而不填充右侧,则最大深度树将在列表中退化,所有右侧节点都为空。
    将此称为主树
  3. 从下一个值(比如 10 值节点)创建一棵树,并将这棵树附加到主树的最深分支
  4. 根据需要重复第 3 步

注意:这是最简单的概念,实现可以利用主树一直排序的事实,并克服初始排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多