[color=
created: 2008
/06/11
filename: BalancedTree.h
author: happymouse
version: v1.0.0.0
*********************************************************************/[
/color
]
[color=
[color=
[color=
[color=
{
LeanToLeft,
Balanced,
LeanToRight
};
[color=
[color=
[color=
{
[color=
[color=
T m_data;
[color=
CBalancedTree<T> *m_pLeftChild;
[color=
CBalancedTree<T> *m_pRightChild;
[color=
EnumBalancedStatus m_balancedStatus;
[color=
[color=
CBalancedTree()
:m_pLeftChild([color=
{
}
[color=
CBalancedTree([color=
:m_pLeftChild([color=
{
m_data = [color=
}
[color=
[color=
{
[color=
{
[color=
}
[color=
{
[color=
}
}
[color=
CBalancedTree<T> * GetLeftChild()
{
[color=
}
[color=
CBalancedTree<T> * GetRightChild()
{
[color=
}
[color=
[color=
{
m_data = [color=
}
[color=
T& GetData()
{
[color=
}
[color=
[color=
{
[color=
T _swapData = m_data;
m_data = m_pRightChild->m_data;
m_pRightChild->m_data = _swapData;
[color=
CBalancedTree<T> *_swapTree = m_pRightChild;
m_pRightChild = m_pRightChild->m_pRightChild;
_swapTree->m_pRightChild = _swapTree->m_pLeftChild;
_swapTree->m_pLeftChild = m_pLeftChild;
m_pLeftChild = _swapTree;
}
[color=
[color=
{
[color=
T _swapData = m_data;
m_data = m_pLeftChild->m_data;
m_pLeftChild->m_data = _swapData;
[color=
CBalancedTree<T> *_swapTree = m_pLeftChild;
m_pLeftChild = m_pLeftChild->m_pLeftChild;
_swapTree->m_pLeftChild = _swapTree->m_pRightChild;
_swapTree->m_pRightChild = m_pRightChild;
m_pRightChild = _swapTree;
}
[color=
[color=
{
[color=
[color=
{
[color=
}
[color=
{
[color=
{
m_pLeftChild = [color=
_fAppend = [color=
}
[color=
{
_fAppend = m_pLeftChild->Insert([color=
}
[color=
{
_fAppend = [color=
[color=
{
[color=
m_balancedStatus = Balanced;
[color=
[color=
m_balancedStatus = LeanToLeft;
_fAppend = [color=
[color=
[color=
[color=
{
RightRotate();
m_pRightChild->m_balancedStatus = Balanced;
[color=
}
[color=
{
[color=
m_pLeftChild->LeftRotate();
RightRotate();
[color=
{
[color=
}
[color=
{
[color=
m_pLeftChild->m_balancedStatus = LeanToLeft;
m_pRightChild->m_balancedStatus = Balanced;
[color=
[color=
m_pLeftChild->m_balancedStatus = Balanced;
m_pRightChild->m_balancedStatus = Balanced;
[color=
[color=
m_pLeftChild->m_balancedStatus = Balanced;
m_pRightChild->m_balancedStatus = LeanToRight;
[color=
}
}
m_balancedStatus = Balanced;
[color=
}
}
}
[color=
{
[color=
{
m_pRightChild = [color=
_fAppend = [color=
}
[color=
{
_fAppend = m_pRightChild->Insert([color=
}
[color=
{
_fAppend = [color=
[color=
{
[color=
m_balancedStatus = Balanced;
[color=
[color=
m_balancedStatus = LeanToRight;
_fAppend = [color=
[color=
[color=
[color=
{
LeftRotate();
m_pLeftChild->m_balancedStatus = Balanced;
[color=
}
[color=
{
[color=
m_pRightChild->RightRotate();
LeftRotate();
[color=
{
[color=
}
[color=
{
[color=
m_pLeftChild->m_balancedStatus = LeanToLeft;
m_pRightChild->m_balancedStatus = Balanced;
[color=
[color=
m_pLeftChild->m_balancedStatus = Balanced;
m_pRightChild->m_balancedStatus = Balanced;
[color=
[color=
m_pLeftChild->m_balancedStatus = Balanced;
m_pRightChild->m_balancedStatus = LeanToRight;
[color=
}
}
m_balancedStatus = Balanced;
[color=
}
}
}
[color=
}
[color=
[color=
[color=
{
[color=
[color=
{
_nLeftDepth = m_pLeftChild->IsBalanced();[color=
}
[color=
{
_nRightDepth = m_pRightChild->IsBalanced();[color=
}
[color=
abs(_nLeftDepth - _nRightDepth) > 1)[color=
{
[color=
}
[color=
{
[color=
}
[color=
{
[color=
}
}
[color=
[color=
{
[color=
[color=
[color=
{
[color=
}
}
};