public Node DeleteNode(Node node, int data) { Node tempNode = node; if (node.nodeValue == data) { if (node.leftNode == null) { node = tempNode.rigntNode; } else if (node.rigntNode == null) { node = tempNode.leftNode; } else { Node minValueNode = node.rigntNode; int minv = minValueNode.nodeValue; while (minValueNode.leftNode != null) { minv = minValueNode.leftNode.nodeValue; minValueNode = minValueNode.leftNode; } node.nodeValue = minv; node.rigntNode = DeleteNode(node.rigntNode, minv); } } else { if (data > node.nodeValue) { node.rigntNode = DeleteNode(node.rigntNode, data); } else { node.leftNode = DeleteNode(node.leftNode, data); } } if (node != null) { node = node.Getheight(node); int balanceFactor = node.GetBalanceFactor(node); if (balanceFactor > 1) { if (node.nodeValue < node.leftNode.nodeValue) { node = node.LeftBalanceing(node); } else { node = node.LeftRightBalancing(node); } } else if (balanceFactor < -1) { if (node.nodeValue > node.rigntNode.nodeValue) { node = node.RightBalanceing(node); } else { node = node.RightLeftBalancing(node); } } } return(node); }
public Node InsertNode(Node node, int data) { if (node.nodeValue == 0) { node.nodeValue = data; node.height = 1; } else if (data < node.nodeValue) { if (node.leftNode == null) { node.leftNode = new Node(); node.leftNode.nodeValue = data; node.leftNode.height = 1; } else { node.leftNode = InsertNode(node.leftNode, data); } } else { if (node.rigntNode == null) { node.rigntNode = new Node(); node.rigntNode.nodeValue = data; node.rigntNode.height = 1; } else { node.rigntNode = InsertNode(node.rigntNode, data); } } //Calculate left and right height of each node node = node.Getheight(node); //Calculate Is balancing needed of each node int balanceFactor = node.GetBalanceFactor(node); if (balanceFactor > 1) { if (data < node.leftNode.nodeValue) { node = node.LeftBalanceing(node); } else { node = node.LeftRightBalancing(node); } } else if (balanceFactor < -1) { if (data > node.rigntNode.nodeValue) { node = node.RightBalanceing(node); } else { node = node.RightLeftBalancing(node); } } return(node); }