Esempio n. 1
0
        public BinaryTree Remove(int value, BinaryTree parentNode = null)
        {
            // Average - O(log(N)) | O(1) Space
            // Worst - O(N) time | O(1) Space

            // First we find the node we want to remove
            // Then remove it.

            var currentNode = this;

            while (currentNode != null)
            {
                if (value < currentNode.value)
                {
                    parentNode  = currentNode; // keep track of parent node
                    currentNode = currentNode.left;
                }
                else if (value > currentNode.value)
                {
                    parentNode  = currentNode;
                    currentNode = currentNode.right;
                }
                else
                {
                    if (currentNode.left != null && currentNode.right != null)
                    {
                        // Here if node has 2 children nodes
                        currentNode.value = currentNode.right.getMinValue();      // set value to smallest value of right subtree
                        currentNode.right.Remove(currentNode.value, currentNode); // remove smallest value from where we got it
                    }
                    else if (parentNode == null)
                    {
                        if (currentNode.left != null)
                        {
                            currentNode.value = currentNode.left.value;
                            currentNode.right = currentNode.left.right;
                            currentNode.left  = currentNode.left.left;
                        }
                        else if (currentNode.right != null)
                        {
                            currentNode.value = currentNode.right.value;
                            currentNode.left  = currentNode.right.left;
                            currentNode.right = currentNode.right.right;
                        }
                        else
                        {
                            currentNode.value = 0;
                        }
                    }
                    else if (parentNode.left == currentNode)
                    {
                        if (currentNode.left != null)
                        {
                            parentNode.left = currentNode.left;
                        }
                        else
                        {
                            parentNode.left = currentNode.right;
                        }
                    }
                    else if (parentNode.right == currentNode)
                    {
                        if (currentNode.left != null)
                        {
                            parentNode.left = currentNode.right;
                        }
                        else
                        {
                            parentNode.right = currentNode.right;
                        }
                    }
                    break;
                }
            }
            return(this);
        }
Esempio n. 2
0
 public BinaryTree(int value)
 {
     this.value = value;
     this.left  = null;
     this.right = null;
 }