示例#1
0
        //Silme methodu
        public void Delete(T val)
        {
            if (!Search(val))
                Console.WriteLine("Deger yok");
            else
            {
                BSTNODE<T> deleteNode = FindNode(val);
                BSTNODE<T> parent = findParent(val);
                if (isLeaf(deleteNode))//silinecek yapraksa
                {
                    if (deleteNode == root)
                        root = null;
                    else if (parent.Left == deleteNode)
                        parent.Left = null;
                    else
                        parent.Right = null;
                }
                else if (hasOneChild(deleteNode))//tek cocuklu ise
                {
                    if (deleteNode == root)
                        root = root.Left != null ? root.Left : root.Right;
                    else if (parent.Left == deleteNode)
                        parent.Left = deleteNode.Left != null ? deleteNode.Left : deleteNode.Right;
                    else
                        parent.Right = deleteNode.Left != null ? deleteNode.Left : deleteNode.Right;
                }
                else//iki cocugu varsa
                {
                    BSTNODE<T> successor = findSuccessor(deleteNode);
                    Delete(successor.Value);
                    deleteNode.Value = successor.Value;
                }

            }
        }
示例#2
0
 private void postOrder(BSTNODE<T> temp)
 {
     if (temp != null)
     {
         postOrder(temp.Left);
         postOrder(temp.Right);
         Console.WriteLine(temp.Value);
     }
 }
示例#3
0
 //En büyük nodenin değerni bulma
 public T findMax()
 {
     if (root == null)
         return default(T);
     BSTNODE<T> iterator = root;
     while (iterator.Right != null)
         iterator = iterator.Right;
     return iterator.Value;
 }
示例#4
0
 //En küçük node bulma 
 public BSTNODE<T> findMinNode(BSTNODE<T> tempRoot)
 {
     if (tempRoot == null)
         return default(BSTNODE<T>);
     BSTNODE<T> iterator = tempRoot;
     while (iterator.Left != null)
         iterator = iterator.Left;
     return iterator;
 }
示例#5
0
 //Binary Source Tree içerisinde arama methodu
 public bool Search(T val)
 {
     BSTNODE<T> iterator = root;
     while (iterator != null)
     {
         if (iterator.Value.CompareTo(val) == 0)
             return true;
         iterator = iterator.Value.CompareTo(val) == 1 ? iterator.Left : iterator.Right;
     }
     return false;
 }
示例#6
0
 public BSTNODE<T> findParent(T val)
 {
     if (!Search(val) || root.Value.CompareTo(val) == 0)
         return null;
     BSTNODE<T> iterator = root, parent = root;
     while (iterator.Value.CompareTo(val) != 0)
     {
         parent = iterator;
         iterator = iterator.Value.CompareTo(val) == 1 ? iterator.Left : iterator.Right;
     }
     return parent;
 }
示例#7
0
 //Aranan değerin nodunu getirme
 public BSTNODE<T> FindNode(T val)
 {
     if (root == null)
         return null;
     BSTNODE<T> iterator = root;
     while (iterator != null)
     {
         if (iterator.Value.CompareTo(val) == 0)
             return iterator;
         else if (iterator.Value.CompareTo(val) == 1)
             iterator = iterator.Left;
         else
             iterator = iterator.Right;
     }
     return null;
 }
示例#8
0
 //verilen değerin parentinin nodesini getirme
 //Successor bode bulma methodu
 public BSTNODE<T> findSuccessor(BSTNODE<T> treeNode)
 {
     if (treeNode == null)
         return null;
     if (treeNode.Right != null)//node'un saginda eleman varsa
     {
         return findMinNode(treeNode.Right);
     }
     //sag child yoksa
     BSTNODE<T> parent = findParent(treeNode.Value);
     BSTNODE<T> rIterator = treeNode;
     while (parent != null && parent.Right == rIterator)
     {
         rIterator = parent;
         parent = findParent(rIterator.Value);
     }
     return parent;
 }
示例#9
0
        //Binary source tree yapısına eleman eklemeyi sağlar. Önce parentini bulur daha sonra bu değer büyükse sağ küçükse sol tarafa eklenmesini sağlar.
        public void Add(T val)
        {

            if (root == null)
                root = new BSTNODE<T>(val);
            else
            {
                BSTNODE<T> iterator = root, parent = root;

                while (iterator != null)
                {
                    parent = iterator;
                    iterator = iterator.Value.CompareTo(val) == 1 ? iterator.Left : iterator.Right;
                }
                if (parent.Value.CompareTo(val) == 1)
                    parent.Left = new BSTNODE<T>(val);
                else
                    parent.Right = new BSTNODE<T>(val);
            }
        }
示例#10
0
 //Tek çocuklumu?
 public bool hasOneChild(BSTNODE<T> treeNode)
 {
     return (treeNode.Left == null && treeNode.Right != null)
         || (treeNode.Left != null && treeNode.Right == null);
 }
示例#11
0
 //Yaprakmı?
 public bool isLeaf(BSTNODE<T> treeNode)
 {
     return treeNode.Left == null && treeNode.Right == null;
 }
示例#12
0
 private int NodeCount(BSTNODE<T> tempRoot)
 {
     if (tempRoot == null)
         return 0;
     return NodeCount(tempRoot.Left) + 1 + NodeCount(tempRoot.Right);
 }