示例#1
0
        protected IBinaryNode <T> DeleteNode(IBinaryNode <T> node, T data)
        {
            try
            {
                if (node == null)
                {
                    return(node);
                }

                if (Comparer.Compare(data, node.GetData()) < 0)
                {
                    node.SetLeftNode(DeleteNode(node.GetLeftNode(), data));
                }
                else if (Comparer.Compare(data, node.GetData()) > 0)
                {
                    node.SetRightNode(DeleteNode(node.GetRightNode(), data));
                }
                else
                {
                    // node with no leaf nodes
                    if (node.GetLeftNode() == null && node.GetRightNode() == null)
                    {
                        return(null);
                    }
                    else if (node.GetLeftNode() == null)
                    {
                        // node with one node (no left node)

                        return(node.GetRightNode());
                    }
                    else if (node.GetRightNode() == null)
                    {
                        // node with one node (no right node)

                        return(node.GetLeftNode());
                    }
                    else
                    {
                        // nodes with two nodes
                        // search for min number in right sub tree
                        T minValues = MinValue(node.GetRightNode());
                        node.SetData(minValues);
                        node.SetRightNode(DeleteNode(node.GetRightNode(), minValues));
                    }
                }

                return(node);
            }

            catch (NullReferenceException ex)
            {
                throw ex;
            }
        }
示例#2
0
        protected static IBinaryNode <T> DeleteTree(IBinaryNode <T> root)
        {
            if (root != null)
            {
                root.SetLeftNode(DeleteTree(root.GetLeftNode()));
                root.SetRightNode(DeleteTree(root.GetLeftNode()));
                root = null;

                return(null);
            }
            return(null);
        }
示例#3
0
        protected IBinaryNode <T> FindNode(IBinaryNode <T> node, T data)
        {
            if (node == null)
            {
                return(node);
            }
            if (node.GetData().Equals(data))
            {
                return(node);
            }

            if (Comparer.Compare(data, node.GetData()) < 0)
            {
                return(FindNode(node.GetLeftNode(), data));
            }
            else if (Comparer.Compare(data, node.GetData()) > 0)
            {
                return(FindNode(node.GetRightNode(), data));
            }
            else
            {
                // node with no leaf nodes
                if (node.GetLeftNode() == null && node.GetRightNode() == null)
                {
                    return(null);
                }
                else if (node.GetLeftNode() == null)
                {
                    // node with one node (no left node)

                    return(node.GetRightNode());
                }
                else if (node.GetRightNode() == null)
                {
                    // node with one node (no right node)

                    return(node.GetLeftNode());
                }
                else
                {
                    // nodes with two nodes
                    // search for min number in right sub tree
                    T minValues = MinValue(node.GetRightNode());
                    node.SetData(minValues);
                    node.SetRightNode(FindNode(node.GetRightNode(), minValues));
                }
                return(node);
            }
        }
示例#4
0
        protected static IBinaryNode <T> DeleteTree(IBinaryNode <T> root)
        {
            try
            {
                if (root != null)
                {
                    root.SetLeftNode(DeleteTree(root.GetLeftNode()));
                    root.SetRightNode(DeleteTree(root.GetRightNode()));
                    root = null;

                    return(null);
                }
                return(null);
            }
            catch (NullReferenceException nre)
            {
                return(root);
            }
        }