Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 2 của 2
  1. #1
    Có người tìm ra lỗi rồi.
    Sửa
    Mã:
    Node *q = T->pRight;
    SearchStandFor (p,q);
    thành
    Mã:
    SearchStandFor (p, T->pRight);
    - - - Nội dung đã được cập nhật ngày 27-06-2014 lúc 05:16 PM - - -

    Trích dẫn Gửi bởi haidn_1108
    Quan tâm bài viết của bạn, bài viết của bạn có mấy cái tui cần! Có gì còn chưa rõ tui liên hệ nhờ bạn giúp ha! Cảm ơn bạn!
    Có gì bạn cứ viết bài lên diễn đàn, nhiều người sẽ giúp đỡ.[IMG]images/smilies/kiss.gif[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi xóa NODE trên cây BST

    Code:
    Mã:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    typedef struct tagNode
    {
    	int Key;
    	struct tagNode *pLeft, *pRight;
    } Node;
    
    typedef Node* Tree;
    
    void CreateTree (Tree &T)
    {
    	T = NULL;
    }
    
    int InsertNode (Tree &T, int x)
    {
    	if (T)
    	{
    		if (T->Key == x) return 0;
    		if (T->Key > x)
    			return InsertNode (T->pLeft,x);
    		else
    			return InsertNode (T->pRight,x);
    	}
    	T = new Node;
    	if (T == NULL) return -1;
    	T->Key = x;
    	T->pLeft = NULL;
    	T->pRight = NULL;
    	return 1;
    }
    
    void LNR (Tree T)
    {
    	if (T)
    	{	
    		LNR (T->pLeft);
    		cout << T->Key << " ";
    		LNR (T->pRight);
    	}
    }
    
    void SearchStandFor (Tree &p, Tree &q)
    {
    	if (q->pLeft)
    		SearchStandFor (p,q->pLeft);
    	else
    	{
    		p->Key = q->Key;
    		p = q;
    		q = q->pRight;
    	}
    }
    
    int DelNode (Tree &T, int x)
    {
    	if (T == NULL) return 0;
    	else if (T->Key > x)
    		return DelNode (T->pLeft,x);
    	else if (T->Key < x)
    		return DelNode (T->pRight,x);
    	else
    	{
    		Node *p = T;
    		if (T->pLeft == NULL)
    			T = T->pRight;
    		else if (T->pRight == NULL)
    			T = T->pLeft;
    		else
    		{
    			Node *q = T->pRight;
    			SearchStandFor (p,q);
    		}
    		delete p;
    	}
    }
    
    int main ()
    {
    	Tree T;
    	CreateTree (T);
    
    	InsertNode (T,44);
    	InsertNode (T,18);
    	InsertNode (T,88);
    	InsertNode (T,13);
    	InsertNode (T,37);
    	InsertNode (T,59);
    	InsertNode (T,108);
    	InsertNode (T,15);
    	InsertNode (T,23);
    	InsertNode (T,40);
    	InsertNode (T,55);
    	InsertNode (T,71);
    	InsertNode (T,30);
    
    
    	LNR (T);
    	cout << endl;
    
    	DelNode (T,37);
    	LNR (T);
    
    	getch ();
    }
    Giả sử như ở đây, mình xóa nút 37, sau đó in ra sẽ bị lỗi. Mình thử xóa 1 số nút khác, in ra vẫn bình thường. Hàm xóa nút, in cây mình thấy không sai. Mình debug thì lỗi ở chỗ in cây. Mong mọi người giải đáp thắc mắc giùm mình.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •