private static int Main() { Node root = new Node(); root.growTree(4, ""); root.rotateTree(ref root.m_leftChild.m_weight, ref root.m_rightChild.m_weight); return 100; }
public void rotateTree(ref Weight leftWeight, ref Weight rightWeight) { //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - begin"); Node newLeftChild = null, newRightChild = null; int objCount = s_objCount; if (m_leftChild != null) { newRightChild = new Node(); objCount++; newRightChild.m_leftChild = m_leftChild.m_leftChild; newRightChild.m_rightChild = m_leftChild.m_rightChild; newRightChild.m_weight = m_leftChild.m_weight; } if (m_rightChild != null) { newLeftChild = new Node(); objCount++; newLeftChild.m_leftChild = m_rightChild.m_leftChild; newLeftChild.m_rightChild = m_rightChild.m_rightChild; newLeftChild.m_weight = m_rightChild.m_weight; } m_leftChild = newLeftChild; m_rightChild = newRightChild; for (int I = 0; I < 1024; I++) { int[] u = new int[1024]; } GC.Collect(); if (m_rightChild != null) { if (m_rightChild.m_leftChild != null && m_rightChild.m_rightChild != null) { m_rightChild.rotateTree( ref m_rightChild.m_leftChild.m_weight, ref m_rightChild.m_rightChild.m_weight); } else { Weight minus1 = null; m_rightChild.rotateTree(ref minus1, ref minus1); } if (leftWeight != m_rightChild.m_weight) { Console.WriteLine("left weight do not match."); throw new Exception(); } } if (m_leftChild != null) { if (m_leftChild.m_leftChild != null && m_leftChild.m_rightChild != null) { m_leftChild.rotateTree( ref m_leftChild.m_leftChild.m_weight, ref m_leftChild.m_rightChild.m_weight); } else { Weight minus1 = null; m_leftChild.rotateTree(ref minus1, ref minus1); } if (rightWeight != m_leftChild.m_weight) { Console.WriteLine("right weight do not match."); throw new Exception(); } } //Console.WriteLine("rotateTree(" + m_weight.ToString() + ") - end"); }
public virtual void rotateTree(ref int leftWeight, ref int rightWeight) { //Console.WriteLine("rotateTree(" + m_weight.ToString() + ")"); VerifyValid(); // create node objects for children Node newLeftChild = null, newRightChild = null; if (m_leftChild != null) { newRightChild = new Node(); newRightChild.m_leftChild = m_leftChild.m_leftChild; newRightChild.m_rightChild = m_leftChild.m_rightChild; newRightChild.m_weight = m_leftChild.m_weight; } if (m_rightChild != null) { newLeftChild = new Node(); newLeftChild.m_leftChild = m_rightChild.m_leftChild; newLeftChild.m_rightChild = m_rightChild.m_rightChild; newLeftChild.m_weight = m_rightChild.m_weight; } // replace children m_leftChild = newLeftChild; m_rightChild = newRightChild; for (int I = 0; I < 32; I++) { int[] u = new int[1024]; } // verify all valid if (m_rightChild != null) { if (m_rightChild.m_leftChild != null && m_rightChild.m_rightChild != null) { m_rightChild.m_leftChild.VerifyValid(); m_rightChild.m_rightChild.VerifyValid(); m_rightChild.rotateTree( ref m_rightChild.m_leftChild.m_weight, ref m_rightChild.m_rightChild.m_weight); } else { int minus1 = -1; m_rightChild.rotateTree(ref minus1, ref minus1); } if (leftWeight != m_rightChild.m_weight) { Console.WriteLine("left weight do not match."); throw new Exception(); } } if (m_leftChild != null) { if (m_leftChild.m_leftChild != null && m_leftChild.m_rightChild != null) { m_leftChild.m_leftChild.VerifyValid(); m_leftChild.m_rightChild.VerifyValid(); m_leftChild.rotateTree( ref m_leftChild.m_leftChild.m_weight, ref m_leftChild.m_rightChild.m_weight); } else { int minus1 = -1; m_leftChild.rotateTree(ref minus1, ref minus1); } if (rightWeight != m_leftChild.m_weight) { Console.WriteLine("right weight do not match."); throw new Exception(); } } }