private void InOrder(TAvlNode <int, int> node, ref List <int> result) { if (node == null) { return; } InOrder(node.Left, ref result); result.Add(node.Key); InOrder(node.Right, ref result); }
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)); } }
public void Add(int key, int value) { _root = _Add(_root, key, value); }
public AVLTree(TAvlNode <int, int> root) { _root = root; }
public TAvlNode(TAvlNode <TKey, TValue> node) { Key = node.Key; Value = node.Value; Height = 1; }