コード例 #1
0
        public void Add(PointFindTree <T> root, ref int cc, T d)
        {
            PointFindTree <T> p = root;
            PointFindTree <T> r = null;

            while (p != null)
            {
                r = p;
                cc++;
                if (d.CompareTo(p.data) < 0)
                {
                    p = p.left;
                }
                else
                {
                    p = p.right;
                }
            }
            PointFindTree <T> NewPoint = new PointFindTree <T>(d);

            if (d.CompareTo(r.data) < 0)
            {
                r.left = NewPoint;
            }
            else
            {
                r.right = NewPoint;
            }
            cc++;
        }
コード例 #2
0
 static void ShowTree(PointFindTree <T> p, int l)
 {
     if (p != null)
     {
         ShowTree(p.left, l + 3);
         for (int i = 0; i < l; i++)
         {
             Console.Write(" ");
         }
         Console.WriteLine(p.data);
         ShowTree(p.right, l + 3);
     }
 }
コード例 #3
0
 public MyFindTree(ref int cc, params T[] arr)
 {
     if (arr == null)
     {
         root = null;
     }
     else
     {
         root = new PointFindTree <T>(arr[0]);
         for (int i = 1; i < arr.Length; i++)
         {
             Add(root, ref cc, arr[i]);
         }
     }
 }
コード例 #4
0
        public IEnumerator <T> InOrderTraversal()
        {
            if (root != null)
            {
                Stack <PointFindTree <T> > stack   = new Stack <PointFindTree <T> >();
                PointFindTree <T>          current = root;
                bool goLeftNext = true;

                stack.Push(current);

                while (stack.Count > 0)
                {
                    if (goLeftNext)
                    {
                        while (current.left != null)
                        {
                            stack.Push(current);
                            current = current.left;
                        }
                    }

                    yield return(current.data);

                    if (current.right != null)
                    {
                        current    = current.right;
                        goLeftNext = true;
                    }
                    else
                    {
                        current    = stack.Pop();
                        goLeftNext = false;
                    }
                }
            }
        }
コード例 #5
0
 public MyFindTree()
 {
     root = null;
 }
コード例 #6
0
 public PointFindTree()
 {
     data  = default(T);
     left  = null;
     right = null;
 }
コード例 #7
0
 public PointFindTree(T d)
 {
     data  = d;
     left  = null;
     right = null;
 }