public
static
HeapNode merge(HeapNode h1, HeapNode h2) {
if
(
null
== h1) {
return
h2;
}
else
if
(h2 ==
null
)
{
return
h1;
}
else
{
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
{
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;
}
}
}
}