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

Đề tài: Thắc mắc về hàm xóa 1 node trong cây BST

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

    Mặc định Thắc mắc về hàm xóa 1 node trong cây BST

    Em thực hiện cách thức xóa 1 node trong BST bằng cách gọi hàm recursive_Delete.
    Code:
    void removeNode(TreeNode *&subroot, int target) {
    	TreeNode *pDel = subroot;
    	if (subroot->left == NULL)
    	{
    		subroot = subroot->right;
    	}
    	else if (subroot->right == NULL)
    	{
    		subroot = subroot->left;
    	}
    	else
    	{
    		TreeNode *parent = pDel;
    		pDel = pDel ->left;
    		while (pDel->right != NULL)
    		{
    			parent = pDel;
    			pDel = pDel->right;
    		}
    		subroot->data = pDel->data;
    		if (parent == subroot)
    		{
    			parent->left = pDel->left;
    		}
    		else
    		{
    			parent->right = pDel->left;
    		}
    		delete pDel;
    	}
    	return;
    }
    
    void recursive_Delete(TreeNode *&subroot, int target) {
    	if (subroot == NULL)
    		return ;
    	else if (target < subroot->key)
    	{
    		return recursive_Delete(subroot->left, target);
    	}
    	else if (target > subroot->key)
    	{
    		return recursive_Delete(subroot->right, target);
    	}
    	else
    	{
    		removeNode(subroot, target);
    	}
    }
    Em thấy hàm đệ quy ở trên chỉ có nhiệm vụ là tìm đúng node cần xóa để gọi hàm removeNode, còn việc xóa node là do hàm removeNode thực hiện. Vì vậy khi em thử chạy trực tiếp hàm removeNode cho node cần xóa nhưng lại không thể xóa được (trường hợp cụ thể là node lá), mấy bác có thể giải thích giúp em tại sao được không ạ ?

  2. #2
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    248

    Bạn thử trực tiếp thế nào?

  3. #3
    Ngày gia nhập
    01 2013
    Bài viết
    1,479

    Truyền tham chiếu mà bạn
    Hàm recursive ko chỉ tìm thôi đâu

  4. #4
    Ngày gia nhập
    10 2014
    Bài viết
    13

    Xóa node 3 trường hợp xảy ra :
    - node lá (leaf node)
    - node trong (internal node)
    - node có 1 con

    Thuật toán của bạn không bao gồm hết 3 trường hợp trên.



    Học lập trình bắt đầu từ đâu ?

    www.laptrinhCcanban.com

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