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;

Leave a Reply