13 - | C++ Data Structures | - | Binary Search Tree - Part 2 | - | تراكيب البيانات |

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 ม.ค. 2025

ความคิดเห็น • 34

  • @DesoukiEgypt
    @DesoukiEgypt  3 ปีที่แล้ว +57

    Program code
    #include
    using namespace std;
    class Node
    {
    public:
    int data;
    Node* left, * right;
    Node(int value)
    {
    data = value;
    left = right = NULL;
    }
    };
    class BST
    {
    public:
    Node* root;
    BST()
    {
    root = NULL;
    }
    Node* Insert(Node* r, int item)
    {
    if (r == NULL)
    {
    Node* newnode = new Node(item);
    r = newnode;
    }
    else if (item < r->data)
    r->left = Insert(r->left, item);
    else
    r->right= Insert(r->right, item);

    return r;
    }
    void Insert(int item)
    {
    root= Insert(root, item);
    }
    void Preorder(Node* r) // root ->left->right
    {
    if (r == NULL)
    return;
    cout data left);
    Preorder(r->right);
    }
    void Inorder(Node* r) // left->root -> right
    {
    if (r == NULL)
    return;

    Inorder(r->left);
    cout data right);
    }

    void Postorder(Node* r) // left--> right->root
    {
    if (r == NULL)
    return;
    Postorder(r->left);
    Postorder(r->right);
    cout data data == key)
    return r;
    else if (key < r->data)
    return Search(r->left, key);
    else
    return Search(r->right, key);
    }
    bool Search(int key)
    {
    Node* result = Search(root, key);
    if (result == NULL)
    return false;
    else
    return true;
    }
    Node* Findmin(Node* r)
    {
    if (r == NULL)
    return NULL;
    else if (r->left == NULL)
    return r;
    else
    return Findmin(r->left);
    }
    Node* Findmax(Node* r)
    {
    if (r == NULL)
    return NULL;
    else if (r->right == NULL)
    return r;
    else
    return Findmax(r->right);
    }
    Node* Delete(Node* r, int key)
    {
    if (r == NULL) // Empty Tree
    return NULL;
    if (key < r->data) // Item exists in left sub tree
    r->left = Delete(r->left, key);
    else if (key > r->data) // item exists in right sub tree
    r->right =Delete(r->right, key);
    else
    {
    if (r->left == NULL && r->right == NULL) // leaf node
    r = NULL;
    else if (r->left != NULL && r->right == NULL) // one child on the left
    {
    r->data = r->left->data;
    delete r->left;
    r->left = NULL;
    }
    else if (r->left == NULL && r->right != NULL) // one child on the right
    {
    r->data = r->right->data;
    delete r->right;
    r->right = NULL;
    }
    else
    {
    Node* max = Findmax(r->left);
    r->data = max->data;
    r->left= Delete(r->left, max->data);

    }
    }
    return r;
    }
    };
    int main()
    {
    //45, 15, 79, 90, 10, 55, 12, 20, 50
    BST btree;
    btree.Insert(45);
    btree.Insert(15);
    btree.Insert(79);
    btree.Insert(90);
    btree.Insert(10);
    btree.Insert(55);
    btree.Insert(12);
    btree.Insert(20);
    btree.Insert(50);
    cout

    • @مسلمحيدر-ط7س
      @مسلمحيدر-ط7س 2 ปีที่แล้ว +2

      استاذ هذا الفيديو شرح intالارقام
      استاذ واذا طلب منا بلسؤال عنchar اوstring
      كيف يتم ذلك؟من حيث ا لمقارنه الاكبر اليمين والاصغراليسار؟

    • @gharbihaythem8815
      @gharbihaythem8815 2 ปีที่แล้ว +3

      صعب

    • @Hex-yx2yl
      @Hex-yx2yl 8 หลายเดือนก่อน +1

      @@مسلمحيدر-ط7س أعتقد هتجيب الأسكي كود بتاع الحرف

    • @ahmedmohamed-qv8jh
      @ahmedmohamed-qv8jh 6 หลายเดือนก่อน

      @@مسلمحيدر-ط7س
      ASCII

  • @ahmedibrahim7411
    @ahmedibrahim7411 2 ปีที่แล้ว +15

    اتمني من حضرتك تكمل السلسله دي

  • @flamesdestroy5935
    @flamesdestroy5935 3 ปีที่แล้ว +8

    جزاك الله خيرا و طريقة تعليمك الممتازة

  • @SaDTuX
    @SaDTuX 11 หลายเดือนก่อน

    الله يرضى عليك يا رب
    الشرح جميل اوى

  • @مسلمحيدر-ط7س
    @مسلمحيدر-ط7س 2 ปีที่แล้ว +4

    اسٌتاذ محمد ممتاز شرحك👍

  • @Mohamed-Nour01
    @Mohamed-Nour01 หลายเดือนก่อน

    جزاك الله خيرا

  • @FtAlshibani
    @FtAlshibani หลายเดือนก่อน

    تسلم

  • @ahmedatef1717
    @ahmedatef1717 2 ปีที่แล้ว

    لايك قبل ما اتفرج 🤍🤍

  • @أيمانخضيرعباس-ر7ض
    @أيمانخضيرعباس-ر7ض 9 หลายเดือนก่อน

    عاشت الايادي ❤❤❤

  • @طهالصلوي-ظ8و
    @طهالصلوي-ظ8و 2 ปีที่แล้ว +4

    السلام عليكم...جزاك الله خيرا أستاذ محمد على الشرح المبسط...أين ممكن أجد درس Recursion اللي تكلمت عليه في الفيديو...بحثت عليه في قائمة دروس c++ لكن ماوجدت...شكرا جزيلا

  • @Icarus_Rise
    @Icarus_Rise ปีที่แล้ว +3

    دكتور لو سمحت أعتقد أن في خطأ بسيط في الكود بتاع الInsert function الأولى اللي عملنا لها overloading
    لما نيجي نطبع محتوى الtree بعد ما عملنا Insert للقيم باستخدام الطريقة الأولى لما بنباصي item & root مفيش حاجة بتنطبع ودا معناه أن الroot لسه قيمته NULL
    لكن الfunction التانية اللي الباراميتر بتاعهاهو item بس شغالة عادي
    كدا المفروض نباصي الroot by reference مش by value ؟
    وحابب أشكر حضرتك جدا لأنك كنت أحد الأسباب اللي خلتني أبدأ اتعلم برمجة وبدأت كورساتك من شهرين الأساسيات والOOP ودلوقتي الdata structures وكل حاجة تقريبا كنت محتاجها بلاقيها هنا
    Node* Insert(Node*& r, int item)
    {//here we must pass the pointer by reference not by value so that the pointer value gets actually updated
    if (r == NULL)
    {
    Node* newnode = new Node(item);
    r = newnode;
    }
    else if (item < r->data)
    r->left = Insert(r->left, item);
    else
    r->right = Insert(r->right, item);
    return r;
    }
    void Insert(int item)
    {
    root = Insert(root, item);
    /*
    here it doesn't matter whether or not the original Insert function that's being overloaded works with the pointer passed by reference or by value
    because we explicitly assign a new value to the root by writing root= Insert(root,item); which means the original Insert func works with the value of root
    but eventually the root gets assigned the new updated value which just being stored locally inside the scope of the original Insert func
    */
    }

  • @paris7967
    @paris7967 หลายเดือนก่อน

    طب لو كان input string data type who do compare

  • @ghinawfe4854
    @ghinawfe4854 2 ปีที่แล้ว +3

    يعطيك الف عافية دكتور ... لو سمحت شو لازمة الطرف اليساري من المعادلة في السطر 40 ؟؟ ما دام نحنا أساسا في الحالة الأولى أسندنا العقدة الجديدة إلى المؤشر المدخل للدالة insert ??

    • @AZeed18
      @AZeed18 2 ปีที่แล้ว

      عرفت الإجابة؟

    • @asemalsalahi9953
      @asemalsalahi9953 2 ปีที่แล้ว +1

      اذا كنت تقصد الحالة الأولى التي في السطر 31:
      ففي السطر ال 31 جعل الجذر الأساسي يساوي العقدة الجديدة لأن الشجرة كانت فارغة
      لكن في السطر 40 كانت الشجرة ممتلئة فتم تحديد موقع العقدة الجديدة على يمين الجذر, لأن العقدة الجديدة اكبر من الجذر
      أي انك في السطر 40 أنت بحاجة تحديد مكان وضعها بالنسبة للجذر سواء كان basic root
      أو sub root

  • @fareselshafey3320
    @fareselshafey3320 ปีที่แล้ว +4

    لو سمحت يا دكتور ممكن لينك الفيديو اللي حضرتك شارح فيه ال recursion

    • @abdelrahmanbakr8058
      @abdelrahmanbakr8058 4 หลายเดือนก่อน

      ياريت لإني لا أتذكر إنه شرحه

  • @abdelrahmantohamy7947
    @abdelrahmantohamy7947 2 ปีที่แล้ว +2

    هو كده الكورس كامل ولا لا ؟ لو اى حد يفيدني

  • @tawjehemohammed8000
    @tawjehemohammed8000 3 ปีที่แล้ว +2

    مهندس سؤال ياريت تجاوب عليه
    ال
    else if (item < r->data)
    r->left = Insert(r->left, item);
    بحالة ال ريكيرجن بالزبط اي edge او اي بوينتر في كل مره بأشر على النود

    • @tawjehemohammed8000
      @tawjehemohammed8000 3 ปีที่แล้ว +2

      يعني اي r->left الي حيأشر على النود

  • @asmabou8766
    @asmabou8766 ปีที่แล้ว +2

    ممكن رابط function recursion

    • @Mohamedeleyat
      @Mohamedeleyat ปีที่แล้ว

      ياريت والله 😊

  • @mustafakhodor5119
    @mustafakhodor5119 2 ปีที่แล้ว +3

    هذا كل شيء في data structure?

    • @sandysamy4552
      @sandysamy4552 ปีที่แล้ว

      لا طبعاااا بس مش عارفة ليه مش شترح كل حاجة

  • @ibrahimsuleiman4522
    @ibrahimsuleiman4522 2 ปีที่แล้ว +5

    ممكن رابط مباشر لدرس الrecursion ما لقيتو بالقناة

    • @osamhzoldek54
      @osamhzoldek54 2 ปีที่แล้ว

      تلكاه بموضوع الدوال

  • @ahmedshabaan1181
    @ahmedshabaan1181 ปีที่แล้ว

    19:39 / 50:33

  • @husseinkamal6406
    @husseinkamal6406 ปีที่แล้ว

    ليه الشرح مش مبسط زي شرح اللينكد