Пример #1
0
        public void DeleteByCopying(int value)
        {
            TreeNode curr = Root;
            TreeNode parent = null;

            while (curr != null)
            {
                if (curr.Value == value)
                    break;

                parent = curr;

                if (curr.Value > value)
                    curr = curr.Left;
                else
                    curr = curr.Right;
            }

            if (curr == null)
                return;

            if (curr.Left == null && curr.Right == null)
            {
                if (parent != null)
                {
                    if (parent.Value > curr.Value)
                        parent.Left = null;
                    else
                        parent.Right = null;
                }
                else
                    Root = null;
                curr = null;

            }
            else
            {
                if (curr.Left == null)
                {
                    if (parent != null)
                    {
                        if (parent.Value > curr.Value)
                            parent.Left = curr.Right;
                        else
                            parent.Right = curr.Right;
                    }
                    else
                        parent = curr.Right;
                    curr = null;
                }
                else if (curr.Right == null)
                {
                    if (parent != null)
                    {
                        if (parent.Value > curr.Value)
                            parent.Left = curr.Left;
                        else
                            parent.Right = curr.Left;
                    }
                    else
                        parent = curr.Left;
                    curr = null;
                }
                else
                {
                    //find the rightmost node
                    TreeNode tmp = curr.Left;
                    TreeNode tmpParent = curr;
                    while (tmp.Right != null)
                    {
                        tmpParent = tmp;
                        tmp = tmp.Right;
                    }

                    curr.Value = tmp.Value;

                    if (tmpParent != curr)
                        tmpParent.Right = tmp.Left;
                    else
                        tmpParent.Left = tmp.Left;

                    tmp = null;

                }
            }
        }
Пример #2
0
 public void AddNode(int value)
 {
     TreeNode newNode = new TreeNode(value);
     addNode(Root, newNode);
 }
Пример #3
0
        private void dfsPreorder(TreeNode node)
        {
            if (node == null)
                return;

            Console.WriteLine(node.Value);
            dfsPreorder(node.Left);
            dfsPreorder(node.Right);
        }
Пример #4
0
        private void addNode(TreeNode parent, TreeNode child)
        {
            if (parent == null)
            {
                Root = child;
                return;
            }
            if (parent.Value == child.Value)
                return;

            if (parent.Value > child.Value)
            {
                if (parent.Left == null)
                    parent.Left = child;
                else
                    addNode(parent.Left, child);
            }
            else
            {
                if (parent.Right == null)
                    parent.Right = child;
                else
                    addNode(parent.Right, child);
            }
        }