No idea..
public BTNode DelNode(string key)
{
if (key == null)
return null;
if (root != null)
{
BTNode n = root;
BTNode pre = null;
BTNode runner = null;
BTNode prerunner = null;
bool left = false;
bool right = false;
while (n.Key != key)
{
pre = n;
if (n.Key.CompareTo(key) < 0 && n.Right != null)
{
n = n.Right;
right = true;
left = false;
}
else if (n.Key.ToString().CompareTo(key) > 0 && n.Left != null)
{
n = n.Left;
right = false;
left = true;
}
}
if (n == root)
{
root = null;
return n;
}
else if (n.Right != null)
{
runner = n.Right;
while (runner.Left != null)
{
prerunner = runner;
runner = runner.Left;
}
if (prerunner != null)
prerunner.Left = null;
else
n.Right = runner.Right;
}
else
runner = n.Left;
if (runner != null && n.Left!=runner)
{
runner.Left = n.Left;
runner.Right = n.Right;
}
if (left == true)
pre.Left = runner;
else
pre.Right = runner;
return n;
}
else
return null;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (key == null)
return null;
else if (root != null)
{
BTNode n = root;
BTNode pre = null;
BTNode runner = null;
BTNode ans = null;
bool left = false;
bool right = false;
while (n.Key != key)
{
pre = n;
if (n.Key.CompareTo(key) < 0 && n.Right != null)
{
n = n.Right;
right = true;
left = false;
}
else if (n.Key.ToString().CompareTo(key) > 0 && n.Left != null)
{
n = n.Left;
right = false;
left = true;
}
}
ans = n;
/*if (n == root)
{
if (root.Right!=null)
root = null;
return n;
}*/
if (left == true)
{
if (n.Right != null)
{
n = n.Right;
while (n.Left != null)
{
runner = n;
n = n.Left;
}
if (runner != null)
runner.Left = null;
else
{
if (left == true)
pre.Left.Right = n.Right;
else
pre.Right.Right = n.Right;
}
}
else
pre.Left = n.Left;
return ans;
}
else
{
if (n.Right != null)
{
n = n.Right;
while (n.Left != null)
{
runner = n;
n = n.Left;
}
if (runner != null)
runner.Left = null;
else
{
n.Left = pre.Right.Left;
pre.Right = n;
}
}
else
{
pre.Right = n.Left;
/*n = n.Right;
while (n.Left != null)
{
runner = n;
n = n.Left;
}
if (runner != null)
runner.Left = null;
else
{
if (left == true)
pre.Left.Right = n.Right;
else
pre.Right.Right = n.Right;
}*/
}
return ans;
}
/*else if (n.Right != null && right == true)
{
n = n.Right;
while (n.Left != null)
{
runner = n;
n = n.Left;
}
if (runner != null)
runner.Left = null;
else
{
if (left == true)
pre.Left.Right = n.Right;
else
pre.Right.Right = n.Right;
}
}
else
{
if (left == true)
pre.Left = n.Left;
else
pre.Right = n.Left;
return n;
}
if (runner != null && n.Left!=runner)
{
runner.Left = n.Left;
runner.Right = n.Right;
}
if (left == true)
pre.Left = runner;
else
pre.Right = runner;
return n;*/
}
else
return null;