public
static
HeapNode merge(HeapNode h1, HeapNode h2) {
if
(
null
== h1) {
return
h2;
}
else
if
(h2 ==
null
) {
return
h1;
}
else
{
// 两个都不是null
int
v1 = h1.mValue;
int
v2 = h2.mValue;
if
(v1 <= v2) {
// 拿他的
h1.mRightChild = merge(h1.mRightChild, h2);
if
(npl(h1.mLeftChild) < npl(h1.mRightChild)) {
HeapNode node = h1.mLeftChild;
h1.mLeftChild = h1.mRightChild;
h1.mRightChild = node;
}
h1.mNpl = Math.min(npl(h1.mLeftChild), npl(h1.mRightChild)) +
1
;
return
h1;
}
else
{
h2.mRightChild = merge(h1, h2.mRightChild);
if
(npl(h2.mLeftChild) < npl(h2.mRightChild)) {
HeapNode node = h2.mLeftChild;
h2.mLeftChild = h2.mRightChild;
h2.mRightChild = node;
}
h2.mNpl = Math.min(npl(h2.mLeftChild), npl(h2.mRightChild)) +
1
;
return
h2;
}
}
}
}
public
static
HeapNode merge(HeapNode h1, HeapNode h2) {
if
(
null
== h1) {
return
h2;
}
else
if
(h2 ==
null
) {
return
h1;
}
else
{
// 两个都不是null
int
v1 = h1.mValue;
int
v2 = h2.mValue;
if
(v1 <= v2) {
// 拿他的
h1.mRightChild = merge(h1.mRightChild, h2);
if
(npl(h1.mLeftChild) < npl(h1.mRightChild)) {
HeapNode node = h1.mLeftChild;
h1.mLeftChild = h1.mRightChild;
h1.mRightChild = node;
}
h1.mNpl = Math.min(npl(h1.mLeftChild), npl(h1.mRightChild)) +
1
;
return
h1;
}
else
{
h2.mRightChild = merge(h1, h2.mRightChild);
if
(npl(h2.mLeftChild) < npl(h2.mRightChild)) {
HeapNode node = h2.mLeftChild;
h2.mLeftChild = h2.mRightChild;
h2.mRightChild = node;
}
h2.mNpl = Math.min(npl(h2.mLeftChild), npl(h2.mRightChild)) +
1
;
return
h2;
}
}
}
}