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

Đề tài: Cây nhị phân: Đếm số nút có một con và hai con bằng cách đệ quy.

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

    Mặc định Cây nhị phân: Đếm số nút có một con và hai con bằng cách đệ quy.

    Đếm số nút trên cây và đếm số nút lá bằng cách đệ quy thì tớ làm được rồi.
    Bây giờ đang đau đầu với việc đếm số nút có 1 con và số nút có 2 con (xem như 2 bài). Thực chất, nếu giải được bài đếm số nút có 1 con thì sẽ giải được bài đếm số nút có 2 con.

    Tớ nghĩ mãi mà không thể viết bằng đệ quy được.
    Nhờ các bạn vào cho đoạn code (đừng nêu ý tưởng, mình có ý tưởng rồi):
    Ý tưởng là như thế này:
    -khởi tạo biến Dem=0;
    -Nếu cây rỗng: số nút 0
    -Đệ quy: Nếu nút nào đó không phải là nút lá (xem như đã có thủ tục kiểm tra 1 nút có phải là lá hay không) thì dem++1;
    Chả biết phải viết như thế nào để ra đệ quy nữa.
    Help me!
    Thanks!

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

    Có gì khó nhỉ, chỉ cần hiểu đệ quy là gì thì ok thôi!
    2 nút:
    C++ Code:
    1. int count(Tree* pTree)
    2. {
    3.     if (pTree==NULL) return 0;
    4.     if (pTree->left!=NULL&&pTree->right!=NULL) return 1+count(pTree->left)+count(pTree->right);
    5.     else return count(pTree->left)+count(pTree->right);
    6. }
    1 nút:
    C++ Code:
    1. int count(Tree* pTree)
    2. {
    3.     if (pTree==NULL) return 0;
    4.     if ((pTree->left!=NULL&&pTree->right==NULL)||(pTree->left==NULL&&pTree->right!=NULL))
    5.     return 1+count(pTree->left)+count(pTree->right);
    6.     else return count(pTree->left)+count(pTree->right);
    7. }
    PS: viết ngẫu hứng, chưa debug, có gì sai xin thứ lỗi

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

    Bạn giỏi quá! Chạy rồi! Cám ơn bạn!

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

    Cây nhị phân: Đếm số nút trung gian?
    ai giúp mình với, thank nhiều !

  5. #5
    Ngày gia nhập
    03 2012
    Bài viết
    2

    // dem so nut cua cay
    int CountNode(Tree T)
    {
    if( T == NULL)
    return 0;
    else
    return 1 + CountNode(T->pleft) + CountNode(T->pright);
    }

    // kiem tra co fai nut la hay ko
    char IsLeaf(Node *p)
    {
    return (p->pleft == NULL) && (p->pright == NULL);
    }
    // dem so nut la
    int CountLeaf(Tree T)
    {
    if(T == NULL)
    return 0;
    else
    if(IsLeaf(T))
    return 1;
    else
    return CountLeaf(T->pleft) + CountLeaf(T->pright);
    }

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

  1. Thêm 1 nút , Xóa 1 nút , Sửa 1 nút, duyệt danh sách theo liên kết phải, theo liên kết trái.
    Gửi bởi dodinhlong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 23-05-2013, 11:51 AM
  2. Trả lời: 3
    Bài viết cuối: 11-04-2012, 09:26 AM
  3. Cấu trúc dữ liệu Thêm nút và In nút trong binary tree, ai giúp em với.
    Gửi bởi HacAmThienThan trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 5
    Bài viết cuối: 24-10-2011, 04:12 PM
  4. Sự kiện Click nút Next và nút Previous trong code WMP dùng WMPLib
    Gửi bởi hocphp_1998 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 15-12-2010, 09:24 PM
  5. cách chuyển nút close form thành nút phóng to
    Gửi bởi tuanngocpt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 05-11-2010, 07:13 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