34 lines
847 B
Python
34 lines
847 B
Python
from wavl import WAVLTree
|
|
from node import Node, Comparable
|
|
|
|
import logging
|
|
from typing import TypeVar, Optional
|
|
|
|
logger = logging.getLogger(__name__)
|
|
T = TypeVar("T", bound=Comparable)
|
|
|
|
|
|
class RAVLTree(WAVLTree[T]):
|
|
def is_correct_node(
|
|
self, node: Optional[Node[T]], recursive: bool = True
|
|
) -> bool:
|
|
if not node:
|
|
return True
|
|
|
|
if not all(child_rank > 0 for child_rank in Node.differences(node)):
|
|
return False
|
|
|
|
return not recursive or (
|
|
self.is_correct_node(node.left)
|
|
and self.is_correct_node(node.right)
|
|
)
|
|
|
|
# region DeleteRebalance
|
|
|
|
def _delete_rebalance(
|
|
self, node: Optional[Node[T]], parent: Optional[Node[T]]
|
|
) -> None:
|
|
# There is no rebalance after delete in rAVL tree
|
|
pass
|
|
|
|
# endregion DeleteRebalance
|