Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: [Hỏi] Xóa phần tử x trong cây nhị phân tìm kiếm

  1. #1
    Ngày gia nhập
    11 2008
    Bài viết
    35

    Mặc định [Hỏi] Xóa phần tử x trong cây nhị phân tìm kiếm

    Đây là đoạn code tạo nút trên cây
    Code:
    typedef int elem;
    typedef struct nodet{
    			elem data;
    			struct nodet *left,*right;
    }node;
    typedef node *tree;
    Đây là phần xóa nút trên cây
    Code:
    void del (tree &r,tree &q)
    {
    	if (r->right!=NULL)
    		del(r->right,q);
    	else
    	{
    		q->data=r->data;
    		q=r;
    		r=r->left;
    	}
    }
    void deletetree (tree &t,elem x)
    {
    	if (t!=NULL)
    		if (x<t->data)
    			deletetree (t->left,x);
    		else if (x>t->data)
    			deletetree (t->right,x);
    		else
    		{
    			tree q=t;
    			if (t->left==NULL)
    				t=t->right;
    			else if (t->right==NULL)
    				t=t->left;
    			else
    				del(t->left,q);
    			delete q;
    		}
    }
    Mình ko hiểu:
    1-"tree q=t" nghĩa là gì, là q trỏ tới t, hay t trỏ đến đâu thì đó là q???
    2-"t=t->right(left)" ko phải là t chuyển sang nút con bên phải hay sao mà có thể xóa được nút cần xóa
    3-"q->data=r->data;
    q=r;
    r=r->left;"----->cái này càng ko hiểu

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    35

    sao ko ai trả lời hết vậy, hay mình post nhầm chỗ

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    PHP Code:
    Mình ko hiểu
    1-"tree q=t" nghĩa là gìlà q trỏ tới thay t trỏ đến đâu thì đó là q??? 
    2-"t=t->right(left)"  ko phải là t chuyển sang nút con bên phải hay sao mà có thể xóa được nút cần xóa
    3
    -"q->data=r->data;
    q=r;
    r=r->left;"
    ----->cái này càng ko hiểu 
    Tree q = t : Thì mình nghĩ là "t trỏ đến đâu thì q trỏ đến đó "

    t = t-> right; thì t chuyển sang node con bên phải.

    q->data = r->data ; copy nội dung
    q = r; tương tự q = t
    r = r->left; tương tự t = t->right;

    Vấn đề xóa node trong cây nhị phân tìm kiếm cũng khá đơn giản, mình không hiểu rõ ý đồ của đoạn code cậu đưa lên lắm.

  4. #4
    Ngày gia nhập
    11 2008
    Bài viết
    35

    Cách xóa node trong đoạn code trên giống y như trong sách vở thôi.
    1-
    Code:
    if (t->left==NULL)
    				t=t->right;
    			else if (t->right==NULL)
    				t=t->left;
    ------->mục đích đoạn code này là:nếu node cần xóa chỉ có một node con hoặc một cây con thì xóa nút t, rồi liên kết nút cha với nút con của nút t lại. nhưng mình ko hiểu t=t->right chỉ là đưa t đi chỗ khác thì làm sao mà xóa được nút t
    Còn thắc mắt một điều nữa, để bữa sau post

Các đề tài tương tự

  1. Giúp mình về xóa phần tử lá trong cây nhị phân tìm kiếm
    Gửi bởi bangdienc9 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 18-05-2012, 02:09 PM
  2. [Help]Lỗi kì lạ - Xóa một phần tử trong cây nhị phân tìm kiếm.
    Gửi bởi A a trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 16-05-2012, 09:51 AM
  3. Lập trình C++ xóa một phần tử trong cây nhị phân tìm kiếm
    Gửi bởi nhatnha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 16-12-2010, 01:40 AM
  4. tìm kiếm tất cả phần tử và xóa phần tử?
    Gửi bởi danchithancong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 28-09-2009, 03:28 PM
  5. [LT][Tìm kiếm]Xóa node trong cây nhị phân tìm kiếm
    Gửi bởi schtroumpfs trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 05-06-2007, 05:47 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn