private TAvlNode <int, int> _Add(TAvlNode <int, int> curNode, int key, int value) { if (curNode == null) { var newNode = new TAvlNode <int, int> (key, value); newNode.Height = 1; return(newNode); } if (key < curNode.Key) { curNode.Left = _Add(curNode.Left, key, value); curNode.Height++; } else if (key > curNode.Key) { curNode.Right = _Add(curNode.Right, key, value); curNode.Height++; } else { //curNode.Key == key; curNode.Value = value; } //Rotate if node now becomes unbalanced. var factor = curNode.GetBalanceFactor(); if (factor > 1 && curNode.Left != null && curNode.Left.GetBalanceFactor() > 1) { //LL } if (factor < 0 && curNode.Right != null && curNode.Right.GetBalanceFactor() > 1) { //RR } if (factor > 1 && curNode.Left != null && curNode.Right.GetBalanceFactor() > 1) { //LR } if (factor < 0 && curNode.Right != null && curNode.Left.GetBalanceFactor() > 1) { //RL } return(curNode); }
private bool _IsBalanced(TAvlNode <int, int> node) { if (node == null) { return(true); } if (Math.Abs(node.GetBalanceFactor()) > 1) { return(false); } else { return(_IsBalanced(node.Left) && _IsBalanced(node.Right)); } }