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

Đề tài: In ra tất cả giá trị ở mức k trong cây nhị phân

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

    Mặc định In ra tất cả giá trị ở mức k trong cây nhị phân

    Mình có bài tập về cây nhị phân , yêu cầu in ra tất cả các giá trị ở mức k ( k tuỳ ý ) trong cây nhị phân .
    Mình suy nghĩ là dùng 1 mảng , để lưu nhãn cho các nút , sau đó tuỳ giá trị của k mà in ra . Nhưng mình vẫn chưa code ra đúng . Mong mấy bạn giúp mình nha. Thanks !!!

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    duyệt theo hết nếu có bậc là k thì xuất ra.
    HT117-5277

  3. #3
    Ngày gia nhập
    03 2011
    Bài viết
    25

    nhưng mà bạn ơi , đúng là duyệt theo hết , nhưng mình phải gán nhãn trước cho nó hay sao , để khi mình duyệt nếu nhãn của phần tử nào trùng k thì mình mới xuất ra

  4. #4
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Nếu khi cài đặt bạn để con trái trỏ tới anh em của nó thì sẽ dễ dàng hơn trong việc in ra theo mức
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  5. #5
    Ngày gia nhập
    05 2011
    Bài viết
    16

    Dùng queue, push node vào thì push mức vào luôn (lúc đầu là 0), mức của node push sau = mức node mức trước + 1.
    C++ Code:
    1.  
    2. void DuyetCayTheoMuc(BT_NODE *pCurr, int muc)
    3. {
    4.     queue <BT_NODE*> q; //queue nay de luu node
    5.     queue <int> qq; //queue nay de luu muc, khi cho node vao queue thi cung cho muc vao queue 1, muc node sau = muc node truoc + 1 :D
    6.  
    7.     q.push(pCurr);
    8.     int iMuc = 0;
    9.     qq.push(iMuc);
    10.  
    11.     while(!q.empty())
    12.     {
    13.         BT_NODE *temp = q.front();
    14.         int tempQ = qq.front();
    15.  
    16.         q.pop();
    17.         qq.pop();
    18.  
    19.         if(tempQ == muc)
    20.             cout << temp->Data << " ";
    21.         if(temp->pLeft != NULL)
    22.             {
    23.                 q.push(temp->pLeft);
    24.                 qq.push(tempQ+1);
    25.             }
    26.         if(temp->pRight != NULL)
    27.             {
    28.                 q.push(temp->pRight);
    29.                 qq.push(tempQ+1);
    30.             }
    31.     }
    32.  
    33. }

  6. #6
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    Mặc định In ra tất cả giá trị ở mức k trong cây nhị phân

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    Nếu khi cài đặt bạn để con trái trỏ tới anh em của nó thì sẽ dễ dàng hơn trong việc in ra theo mức
    cách của anh thì hình như nó chuyển thành cây A-A rùi hehe đúng hem ta

    @giacmo1612 : ý của mình là duyệt hết cây.node nào có chiều cao là h thì xuất ra(= hàm tính chiều cao của node), cách này ko tối ưu nhất vì pải duyệt hết cây
    HT117-5277

  7. #7
    Ngày gia nhập
    06 2009
    Bài viết
    60

    Code:
    void NutTangK(Node *Tree,int k)
    {
    	if( Tree == NULL) // kiểm tra xem Node có bằng NULL, nếu bằng thì return
    	{
    		return;
    	}
    	k--; // Khóa K giảm dần về 0
    	NutTangK(Tree->PLeft,k); // duyệt đệ quy
    	NutTangK(Tree->PRight,k);
    	if( k == 0) // tìm đến tầng cần tìm.
    	{
    		printf("%d\t",Tree->Data);
    	}
    }
    ý bạn đúng không.

  8. #8
    Ngày gia nhập
    11 2010
    Bài viết
    3

    Mặc định cái này chắc là ý của anh hả?(em lam cây tổng quát nhe))

    void timkiem(Tree T,int k)
    {
    int a[100],j=0; //kai mảng a dùng lưu trử cái cần tìm
    for(int i=0 ; i<=k ; i++ )
    {
    if(T.Parent[i]+1 == k)
    {
    a[j] = T.Label[i];
    j++;
    }
    }
    }
    [COLOR="rgb(0, 255, 255)"]//chi cần in mang a ra la xong!mấy anh đống gớp ý kiến giùm em[/COLOR]

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