问题描述
我正在尝试用 Java 为最小堆编写一个 add 函数,但我似乎无法编写一个正常工作的函数。我已经为 add 方法尝试了两种解决方案,但似乎都不起作用。我尝试使用 int 来存储先前的位置,然后将其重新插入堆中,但这不会产生任何结果。任何帮助将不胜感激。
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<ul class="sort top">
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 1
<ul class="sort child">
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 1.1</li>
</ul>
</li>
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 2
<ul class="sort child"></ul>
</li>
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 3
<ul class="sort child"></ul>
</li>
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 4
<ul class="sort child"></ul>
</li>
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 5
<ul class="sort child"></ul>
</li>
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 6
<ul class="sort child"></ul>
</li>
<li class="item ui-state-default"><span class="ui-icon ui-icon-grip-dotted-vertical"></span>Item 7
<ul class="sort child"></ul>
</li>
</ul>
自从我将这个发布到 add 函数以来,我已经取得了一些进展。我现在可以打印其中的一些值,但这些值没有正确打印或添加正确。这是我目前所在的位置:
$(function() {
function makeChildLists(target,class){
$("li",target).each(function(i,el){
$("<ul>",{
class: "child " + class
}).appendTo(el)
});
}
makeChildLists($(".top"),"sort");
$(".sort").sortable({
connectWith: ".sort",handle: "span.ui-icon",placeholder: "ui-state-highlight"
});
$("#sortable").disableSelection();
});
解决方法
一些问题:
-
第一个版本中的
for
条件是错误的:当您减少i
时,该条件应该违反最小限制,例如 {{1 }}。在第二个版本中,它是一个递增循环,它解决了这个问题,只是插入算法确实需要一个递减循环——表示从树的底部走到根部。 -
在第一个版本中,当列表为空时,您不会增加
i >= 0
。这在第二个版本中解决了。但是,在第二个版本中,您不会在索引 0 处填充条目。 -
在第一个版本中,子节点和父节点之间的关系不是根据索引来计算的。这在第二个版本中有更好的介绍——使用除以 2——但它仍然不完全正确。
这是如何做到的。请注意,无需区别对待空列表。此外,无需在每次迭代中交换。只需将值向下移动,为值 back
留下一个间隙,但仅在确定了 right 目标索引后才分配值 x
。这样可以节省一些不必要的任务。
x