public bool Search(TreeElement root, int element) // (1)
        {
            if (root == null)
            {
                return(false);
            }

            return(root.SearchElement(element).foundElement);
        }
        public InfoReturn Delete(TreeElement root, int element)
        {
            SearchResult res = root.SearchElement(element);

            // Element not found
            if (res.foundElement == false)
            {
                return(new InfoReturn(false, root));
            }

            // Element has no successors
            if (res.found.left == null && res.found.right == null) // Element found is a leaf
            {
                if (res.previous == null)                          // Root (leaf) has to be removed
                {
                    root = null;
                    return(new InfoReturn(true, root));
                }

                DelFromLine(res.previous, res.found, null);
                return(new InfoReturn(true, root));
            }

            // Element has only one successor
            if ((res.found.left == null) != (res.found.right == null))
            {
                TreeElement tmp = null;

                if (res.found.left != null)
                {
                    tmp = res.found.left;
                }
                else if (res.found.right != null)
                {
                    tmp = res.found.right;
                }

                if (res.previous == null) // Root has to be removed
                {
                    root = tmp;
                }

                DelFromLine(res.previous, res.found, tmp);
                return(new InfoReturn(true, root));
            }

            // Element hast two successors
            if (res.found.left != null && res.found.right != null)
            {
                DelSymmetricPredecessor(res.found);
                return(new InfoReturn(true, root));
            }

            return(new InfoReturn(false, root)); // Sth went wrong
        }
Beispiel #3
0
        public SearchResult SearchElement(int e, TreeElement prev = null)
        {
            if (e < content)
            {
                if (left != null)
                {
                    return(left.SearchElement(e, this));
                }
                return(new SearchResult(false, this, prev));
            }
            else if (e > content)
            {
                if (right != null)
                {
                    return(right.SearchElement(e, this));
                }
                return(new SearchResult(false, this, prev));
            }

            // Element found
            return(new SearchResult(true, this, prev));
        }
        public InfoReturn Insert(TreeElement root, TreeElement e)
        {
            if (root == null)
            {
                return(new InfoReturn(true, e));
            }

            SearchResult res = root.SearchElement(e.content);

            if (res.foundElement)
            {
                return(new InfoReturn(false, root));                  // Element found
            }
            if (res.found.content > e.content)
            {
                res.found.left = e;
            }
            else
            {
                res.found.right = e;
            }

            return(new InfoReturn(true, root));
        }