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

Đề tài: Help! Xoá các số nguyên tố trong cây nhị phân tìm kiếm

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

    Question Help! Xoá các số nguyên tố trong cây nhị phân tìm kiếm

    Em đã viết code nhưng gặp lỗi ở hàm xóa số nguyên tố. Nhờ mọi người sửa dùm với. Thanks nhiều
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    struct Node 
    {
    	int Info;
    	Node *pLeft, *pRight;
    };
    typedef Node* Tree;
    int AddNode(Tree &T, int x)
    {
    	if (T)
    	{
    		if (T->Info==x) 
    		{
    			printf("Da co trong cay\n"); return 0;
    		}
    		if (x<T->Info) return AddNode(T->pLeft,x);
    		else return AddNode(T->pRight,x);
    	}
    	T=new Node;
    	if (T)
    	{
    		T->Info=x;
    		T->pLeft=T->pRight=NULL;
    		return 1;
    	}
    	else return -1;
    }
    void Nhap(Tree &T, int &x)
    {
    	do
    	{
    		printf("Nhap node: ");
    		scanf("%d",&x);
    		if (x) AddNode(T,x);
    	}while (x!=0);
    }
    void LNR(Tree T)
    {
    	if (T)
    	{
    		LNR(T->pLeft);
    		printf("%d    ",T->Info);
    		LNR(T->pRight);
    	}
    }
    int Test_snt(int n)
    {
    	if (n<2) return 0;
    	for(int i=2;i<n;i++)
    		if (!(n%i)) 
    			return 0;
    	return 1;
    }
    void Standfor(Tree &p, Tree &q)
    {
    	if (q->pLeft)
    		Standfor(p,q->pLeft);
    	else 
    	{
    		q->Info=p->Info;
    		p=q;
    		q=q->pRight;
    	}
    }
    int Delete(Tree &T, int x)
    {
    	if (!T) return 0;
    	if (T->Info<x) return Delete(T->pRight,x);
    	else if (T->Info>x) return Delete(T->pLeft,x);
    	else
    	{
    		Node*p=T;
    		if (!T->pLeft) T=T->pRight;
    		else if (!T->pRight) T=T->pLeft;
    		else
    		{
    			Node *q=T->pRight;
    			Standfor(p,q);
    			T->pRight=q;
    		}
    		delete p; return 1;
    	}
    	
    }
    void DeleteSNT(Tree &T)
    {
    
    	if (T)
    	{
    		if (Test_snt(T->Info)==1) Delete(T,T->Info);
    		DeleteSNT(T->pLeft);
    		DeleteSNT(T->pRight);
    	}
    }
    void main()
    {
    	int n,x;
    	Tree T=NULL;
    	menu:
    	printf("1. Nhap\n2. Xuat\n3. Xoa cac node la so nguyen to\n");
    	printf("Nhap lua chon: "); scanf("%d",&n);
    	switch(n)
    	{
    	case 1: 
    		Nhap(T,x);
    		printf("\n-------------------------------\n");
    		getch();
    		goto menu;
    	case 2:
    		printf("Thu tu LNR: ");
    		LNR(T); printf("\n");
    		printf("\n-------------------------------\n");
    		getch(); 
    		goto menu;
    	case 3:
    		DeleteSNT(T);
    		printf("Cay sau khi xoa tat ca so nguyen to: \n");
    		LNR(T);
    		printf("\n");
    		printf("\n-------------------------------\n");
    		getch();
    	    goto menu;
    	default: exit(1);
    	}
    	getch();
    }
    Đã được chỉnh sửa lần cuối bởi d.hung2610 : 10-05-2012 lúc 01:01 PM.

  2. #2
    Ngày gia nhập
    04 2012
    Nơi ở
    Bình Định (Đang học ở tphcm)
    Bài viết
    35

    Code:
    void Standfor(Tree &p, Tree &q)
    {
    	if (q->pLeft)
    		Standfor(p,q->pLeft);
    	else 
    	{
    		q->Info=p->Info;
    		p=q;
    		q=q->pRight;
    	}
    }
    Hàm trên chưa thế mạng được cho p ( vì q -> info = p-> info )
    Code:
    void Standfor(Tree &p, Tree &q)
    {
    	if (q->pLeft)
    		Standfor(p,q->pLeft);
    	else 
    	{
    		p->Info=q->Info;
    		p=q;
    		q=q->pRight;
    	}
    }
    Hàm xóa số nguyên tố:
    Code:
    void DeleteSNT(Tree &T)
    {
    
    	if (T)
    	{
    		if (Test_snt(T->Info)==1) Delete(T,T->Info);
    		DeleteSNT(T->pLeft);
    		DeleteSNT(T->pRight);
    	}
    }
    Hàm này không nên dùng cách duyệt trước để xóa.
    vì khi xóa thành công thì không có T->pLeft va T->pRight.
    Bạn hãy thử lại bằng cách duyệt sau.
    Đã được chỉnh sửa lần cuối bởi thai_thinh : 10-05-2012 lúc 11:37 PM. Lý do: sửa câu văn

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

  1. Xóa tất cả các node là số nguyên tố trong cây nhị phân tìm kiếm
    Gửi bởi mr.anonymous trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 19-06-2013, 11:40 PM
  2. Dưỡng da từ những nguyên liệu dễ kiếm | trinamda.net
    Gửi bởi linhnhung9x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 29-01-2013, 09:17 AM
  3. cây nhị phân tìm kiếm số nguyên
    Gửi bởi sharkktdm 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: 29-03-2011, 03:37 AM
  4. về cây nhị phân tìm kiếm số nguyên
    Gửi bởi itnowdlu trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 04-10-2010, 01:52 PM
  5. Xin cho ý kiến số nguyên có dấu
    Gửi bởi sangu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 12-12-2008, 10:55 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