public void addValue(double newValue) { if(newValue > value) { //check if the right value is null otherwise add it at this Node if(rightNode == null) { rightNode = new BinaryNode(newValue,this, avl); } else { rightNode.addValue(newValue); } } else { //check if the left Node is null otherwise add it at this Node if(leftNode == null) { leftNode = new BinaryNode(newValue, this, avl); } else { leftNode.addValue(newValue); } } calculateBalance(); //now handle the avl desire if(avl) { AVlHandling(); } }
//if I'm the parent of the tree public BinaryNode(double value, bool avl) { this.value = value; this.parent = null; leftNode = null; rightNode = null; this.avl = avl; balance = 0; }
public bool SaveFileAtPath(BinaryNode saveValue) { try { XMLSerializer serializer = new XMLSerializer(typeof(BinaryNode)); FileStream fs = new FileStream(Path, FileMode.Create); serializer.Serialize(fs,saveValue); fs.Close(); return true; } catch { return false; } }
public double[] GetInOrder(BinaryNode current) { if(current == null) { //use the root as initial value current = root; } //L-W-R double[] result = new double[0]; double[] backup; if(leftNode != null) { result = GetInOrder(leftNode); } //add my own value backup = result; result = new double[backup.Length + 1]; for(int i = 0; i < backup.Length; i++) { result[i] = backup[i]; } result[backup.Length] = value; //add the right value if(rightNode != null) { double[] rightResult = GetInOrder(rightNode); backup = result; result = new double[backup.Length + rightResult.Length]; for(int i = 0; i < backup.Length; i++) { result[i] = backup[i]; } for(int i = 0; i < rightResult.Length; i++) { result[i + backup.Length] = rightResult[i]; } } //return the result return result; }
public BinaryTree(BinaryNode root) { this.root = root; }
public BinaryTree(bool avl, double startValue) { root = new BinaryNode(startValue, avl); }
public double[] GetPreOrder(BinaryNode current) { if(current == null) { //use the root as initial value current = root; } //W-L-R //add my own value double[] result = {value}; double[] backup; if(leftNode != null) { double[] leftResult = GetPreOrder(leftNode); backup = result; result = new double[backup.Length + leftResult.Length]; for(int i = 0; i < backup.Length; i++) { result[i] = backup[i]; } for(int i = 0; i < leftResult.Length; i++) { result[i + backup.Length] = leftResult[i]; } } if(rightNode != null) { double[] rightResult = GetPreOrder(rightNode); backup = result; result = new double[backup.Length + rightResult.Length]; for(int i = 0; i < backup.Length; i++) { result[i] = backup[i]; } for(int i = 0; i < rightResult.Length; i++) { result[i + backup.Length] = rightResult[i]; } } //now return the result return result; }
public double[] GetPostOrder(BinaryNode current) { //check for the first call of the method if(current == null) { current = root; } //L-R-W double[] result = new double[0]; if(leftNode != null) { double[] leftResult = GetPostOrder(leftNode); result = leftResult; } if(rightNode != null) { double[] righResult = GetPostOrder(rightNode); double[] backup = result; result = new double[backup.Length + rightResult.Length]; for(int i = 0; i < backup.Length; i++) { result[i] = backup[i]; } for(int i = 0; i < rightResult.Length; i++) { result[i + backup.Length] = rightResult[i]; } } //now add my own value double[] backup = result; result = new double[backup.Length + 1]; for(int i = 0; i < backup.Length; i++) { result[i] = backup[i]; } result[backup.Length] = value; //return the result return result; }
//set Methods public void SetRightNode(BinaryNode newNode) { rightNode = newNode; }
public void SetParent(BinaryNode newParent) { parent = newParent; }
public void SetLeftNode(BinaryNode newNode) { leftNode = newNode; }
public void RightRotation() { //get the right Node of the current Left Node to prevent for loosing data BinaryNode rightOfLeft = leftNode.GetRightNode(); //setup the leftNode to be the parent leftNode.setParent(parent); leftNode.SetRightNode(this); //setup the parent //check if I'm the left or the right node of the parent if(parent.getValue > value) { //I'm a left node parent.SetLeftNode(leftNode); } else { //I'm a right node parent.SetRightNode(leftNode); } //setup myself parent = leftNode; leftNode = null; //now look if the rightOfLeft has a value if(rightOfLeft != null) { parent.addValue(rightOfLeft.getValue()); } }
public void LeftRotation() { //get the left Node of the current Right node to prevent loosing data BinaryNode leftOfRight = rightNode.GetLeftNode(); //setup the right node rightNode.setParent(parent); rightNode.SetLeftNode(this); //setup parent if(parent.getValue() > value) { //I'm a left node parent.SetLeftNode(rightNode); } else { //I'm a right Node parent.SetRightNode(rightNode); } //setup myself parent = leftNode; leftNode = null; //now look if the leftOfRight has a value if(leftOfRight != null) { parent.addValue(leftOfRight.getValue()); } }