Esempio n. 1
0
 public void Insert(T value)
 {
     if (Root == null)
     {
         Root        = new BalancedTreeNode <T>(value);
         Root.Parent = Root;
     }
     else
     {
         BalancedTreeNode <T> Curr = Root;
         do
         {
             for (; Curr.IsFull(); Curr = GetNextChild(Curr, value))
             {
                 Split(Curr);
                 Curr = Curr.GetParent();
             }
             //Children = new List<BalancedTreeNode<T>>();
             if (!Curr.IsLeaf() && Curr == Root)
             {
                 Curr = GetNextChild(Curr, value);
             }
             else
             {
                 Curr.InsertItem(value);
                 Curr.Reverse();
                 return;
             }
         } while (true);
     }
 }
Esempio n. 2
0
        public void Split(BalancedTreeNode <T> node)
        {
            //BalancedTreeNode<T> newRoot = new BalancedTreeNode<T>(node.Data[1]);
            //BalancedTreeNode<T>[] newNodes = { };
            //if (node.IsFull())
            //{
            //    if (node == Root)
            //    {
            //        if (node.Children != null && node.Children.Count == 2)
            //        {
            //            BalancedTree<T> balancedTree = new BalancedTree<T>();
            //            balancedTree.Root.Data.Add(node.Data[1]);
            //            BalancedTreeNode<T> firstnode = new BalancedTreeNode<T>(node.Data[0]);
            //            balancedTree.Root.Children.Add(firstnode);
            //            BalancedTreeNode<T> secondnode = new BalancedTreeNode<T>(node.Data[1]);
            //            balancedTree.Root.Children.Add(secondnode);
            //        }
            //        else
            //        {
            //            // change node to Root 17:18
            //            BalancedTreeNode<T> newRight = new BalancedTreeNode<T>(Root.Data[2]);
            //            if (Root.Children == null)
            //            {
            //                Root.Children = new List<BalancedTreeNode<T>>();
            //            }
            //            for (int x = 2; x < Root.Children.Count; x++)
            //            {
            //                if (newRight.Children == null)
            //                {
            //                    newRight.Children = new List<BalancedTreeNode<T>>();
            //                }
            //                newRight.Children.Add(Root.Children[x]);
            //            }

            //            for (int x = Root.Children.Count() - 1; x >= 2; x--)
            //            {
            //                Root.Children.RemoveAt(x);
            //            }

            //            for (int x = 2; x > 0; x--)
            //            {
            //                Root.Data.RemoveAt(x);
            //            }

            //            newNodes = new BalancedTreeNode<T>[] { node, newRight };
            //            newRoot.InsertChild(newNodes[0]);
            //            newRoot.InsertChild(newNodes[1]);
            //            Root = newRoot;
            //            Root.Parent = Root; // 17:47
            //        }
            //    }
            //    else
            //    {
            //        Root.Data.Add(node.Data[1]);
            //        Root.Reverse();
            //        if (Root.IsFull())
            //        {
            //            Split(Root);
            //        }
            //        Root.Children.Add(Root.Children[1]);
            //        Root.Children.RemoveAt(1);
            //        BalancedTreeNode<T> newNode = new BalancedTreeNode<T>(node.Data[2]);
            //        Root.Children.Insert(1, newNode);
            //        node.Data.RemoveRange(1, 2);

            //        Root.Parent = Root; // 17:47
            //    }
            //}

            if (node.IsFull())
            {
                BalancedTreeNode <T> newNode = new BalancedTreeNode <T>(node.Data[1]);
                if (node.Children == null)
                {
                    node.Children = new List <BalancedTreeNode <T> >();
                }
                for (int x = 2; x < node.Children.Count; x++)
                {
                    newNode.Children.Add(node.Children[x]);
                }
                for (int x = node.Children.Count - 1; x >= 2; x--)
                {
                    node.Children.RemoveAt(x);
                }
                for (int x = 1; x < node.Data.Count; x++)
                {
                    node.Data.RemoveAt(1);
                }
                Root.Children.Add(node);
                Root.Children.Add(newNode);
            }
        }