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

Đề tài: Đếm số nut lá của 1 cây nhị phân = hàm ko đệ quy

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

    Angry Đếm số nut lá của 1 cây nhị phân = hàm ko đệ quy

    Mọi người giúp t với
    Viết hàm không đệ quy đếm số nút lá của 1 cây nhị phân có nút gốc trỏ bởi T

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

    dùng stack đi bạn

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

    chú ý lần sau không để chữ màu mè nhé. Nhìn phản cảm lắm
    cứ cỡ chứ bình thường là ok

    theo mình duyệt cây thì dùng queue là đẹp nhất
    cách duyệt:
    - lấy phần tử gốc cho vào queue
    - sau đó lấy gốc từ queue ra rồi cho con trái và con phải thứ tự vào queue
    - lấy một phần tử từ queue ra tiếp (tức là con trái của gốc) và tìm con của nó cho vào queue

    ......
    - Nếu lấy phần tử ra mà không có con -> đó là lá: -----> .....
    cách cài đặt thì bạn tự làm tiếp nhé
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  4. #4
    Ngày gia nhập
    01 2011
    Bài viết
    4

    Bạn đọc kĩ đề giúp mình nhé...đừng làm phức tạp vấn đề

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

    Trích dẫn Nguyên bản được gửi bởi lonelystar021292 Xem bài viết
    Bạn đọc kĩ đề giúp mình nhé...đừng làm phức tạp vấn đề
    Ô. Chắc bạn đã giải được rồi nên mới nói vậy đúng ko ?
    Vậy thì post bài lên cho mọi người cùng tham khảo. Mình chỉ có ngu kiến như vậy thôi, có cách hay nữa thì học tập
    À. mà bạn nói mình chưa đọc kỹ đề. vậy hãy chỉ ra điểm sai giúp với :">
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

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

    Mặc định Đếm số nut lá của 1 cây nhị phân = hàm ko đệ quy

    send cái code của cậu mình tham khảo đc ko? nghe cái này thấy thích sao á mà mình làm mãi ko đc

  7. #7
    Ngày gia nhập
    01 2011
    Bài viết
    4

    T mới nghĩ ra cách làm này post lên hỏi ý kiến mọi ng xem đúng ko...mọi ng cho ý kiến nhé

    int demnutla (node pTree)
    {
    if (isEmpty(pTree))
    return NULL;
    int dem1, dem2, dem;
    dem1=dem2=0;
    while (pTree->left==NULL)
    {
    dem1++;
    }
    while (pTree->right==NULL)
    {
    dem2++;
    }
    dem=dem1+dem2;
    return dem;
    }

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

    Nay tự nhiên có người spam trang cá nhân của mình liên quan tới bài này. Tranh thủ post luôn cách cho một số ai muốn tham khảo

    C++ Code:
    1. #include <iostream>
    2. #include <fstream>
    3. #include <queue>
    4.  
    5. // @copyright by beautifulsoul84hung
    6.  
    7. using namespace std;
    8.  
    9. typedef class node* Node;
    10. class node
    11. {
    12.     private:
    13.         int data;
    14.         node *left;
    15.         node *right;
    16.     public:
    17.         node (int data, Node left, Node right)
    18.         {
    19.             this->data = data;
    20.             this->left = left;
    21.             this->right = right;
    22.         }
    23.  
    24.         void setData (int data)
    25.         {
    26.             this->data = data;
    27.         }
    28.         int getData () const
    29.         {
    30.             return data;
    31.         }
    32.  
    33.         void setLeft (Node left)
    34.         {
    35.             this->left = left;
    36.         }
    37.  
    38.         Node getLeft () const
    39.         {
    40.             return left;
    41.         }
    42.  
    43.         void setRight (Node right)
    44.         {
    45.             this->right = right;
    46.         }
    47.  
    48.         Node getRight () const
    49.         {
    50.             return right;
    51.         }
    52.  
    53.         void print ()
    54.         {
    55.             cout << getData () << " ";
    56.         }
    57.  
    58.         friend class binaryTreeADT;
    59.  
    60. };
    61.  
    62. typedef class binaryTreeADT* BinaryTreeADT;
    63. class binaryTreeADT
    64. {
    65.     private:
    66.         Node root;
    67.     public:
    68.         void setRoot (Node root)
    69.         {
    70.             this->root = root;
    71.         }
    72.  
    73.         Node getRoot ()const
    74.         {
    75.             return root;
    76.         }
    77.  
    78.         binaryTreeADT ()
    79.         {
    80.             root = NULL;
    81.         }
    82.         binaryTreeADT (Node root)
    83.         {
    84.             this->root = root;
    85.         }
    86.  
    87.  
    88.         void creatTree (const char* filename)
    89.         {
    90.             fstream _readFile;
    91.             _readFile.open (filename, ios::in);
    92.  
    93.             int data;
    94.             Node tmp;
    95.             queue <Node> q;
    96.  
    97.             _readFile >> data;
    98.             tmp = new node (data, NULL, NULL);
    99.             root = tmp;
    100.             q.push (tmp);
    101.  
    102.             while (!_readFile.eof ())
    103.             {
    104.                 _readFile >> data;
    105.                 tmp = new node (data, NULL, NULL);
    106.                 Node n = q.front ();
    107.                 q.pop ();
    108.                 //n->print ();
    109.                 n->setLeft(tmp);
    110.                 q.push (tmp);
    111.                 if (!_readFile.eof ())
    112.                 {
    113.                     _readFile >> data;
    114.                     tmp = new node (data, NULL, NULL);
    115.                     n->setRight(tmp);
    116.                     //n->print ();
    117.                     q.push (tmp);
    118.                 }
    119.             }
    120.         }
    121.         void printPre ()
    122.         {
    123.             if (getRoot() != NULL)
    124.             {
    125.                 getRoot()->print ();
    126.                 BinaryTreeADT tmp = new binaryTreeADT (getRoot()->getLeft());
    127.                 tmp->printPre ();
    128.                 tmp = new binaryTreeADT (getRoot()->getRight());
    129.                 tmp->printPre ();
    130.             }
    131.         }
    132.  
    133.         void printPost ()
    134.         {
    135.             if (getRoot() != NULL)
    136.             {
    137.                 BinaryTreeADT tmp = new binaryTreeADT (getRoot()->getLeft());
    138.                 tmp->printPost ();
    139.                 tmp = new binaryTreeADT (getRoot()->getRight());
    140.                 tmp->printPost ();
    141.                 getRoot()->print ();
    142.             }
    143.         }
    144.  
    145.         bool hasLeft ()
    146.         {
    147.             if (getRoot()->getLeft()->getRight()!= NULL|| getRoot()->getLeft()->getLeft()!= NULL)
    148.                 return true;
    149.             else
    150.                 false;
    151.         }
    152.  
    153.         bool hasRight ()
    154.  
    155.         {
    156.             if (getRoot()->getRight()->getRight() != NULL|| getRoot()->getRight()->getLeft()!= NULL)
    157.                 return true;
    158.             else
    159.                 false;
    160.         }
    161.  
    162.         BinaryTreeADT Left ()
    163.         {
    164.             if (hasLeft() == true)
    165.             {
    166.                 BinaryTreeADT tree = new binaryTreeADT (getRoot()->getLeft());
    167.                 return tree;
    168.             }
    169.             else return NULL;
    170.         }
    171.  
    172.         BinaryTreeADT Right ()
    173.         {
    174.             if (hasRight() == true)
    175.             {
    176.                 BinaryTreeADT tree = new binaryTreeADT (getRoot()->getRight());
    177.                 return tree;
    178.             }
    179.             else return NULL;
    180.         }
    181.  
    182.         void TraversalLevel ()
    183.         {
    184.             if (getRoot() != NULL)
    185.             {
    186.                 queue <Node> q;
    187.                 Node tmp = getRoot();
    188.                 q.push (tmp);
    189.  
    190.                 while (1)
    191.                 {
    192.                     if (q.empty ())
    193.                         return;
    194.                     tmp = q.front ();
    195.                     tmp->print ();
    196.                     q.pop ();
    197.                     if (tmp->getLeft() != NULL)
    198.                         q.push (tmp->getLeft());
    199.                     if (tmp->getRight() != NULL)
    200.                         q.push (tmp->getRight());
    201.                 }
    202.             }
    203.         }
    204. };
    205.  
    206. int main ()
    207. {
    208.     BinaryTreeADT Tree = new binaryTreeADT ();
    209.     Tree->creatTree("hung.txt");
    210.     Tree->printPre ();
    211.     cout << endl << "-*-"<< endl;
    212.     Tree->printPost ();
    213.     cout << endl << endl << "---" << endl;
    214.     BinaryTreeADT newTree = Tree->Left ();
    215.     newTree->printPost ();
    216.     cout << endl;
    217.     newTree->printPre();
    218.  
    219.     cout << endl << "***" << endl;
    220.     newTree->TraversalLevel ();
    221.     return 0;
    222. }

    TraversalLevel ()
    chú ý hàm trên. Ở trên hàm TraversalLevel của mình dùng để in theo mức. Công việc đếm lá chỉ là lấy từ trong stack ra. Nếu như không có con trái và con phải thì ---> Là lá
    @angelfalls: Mới bị banned à . Chữ màu không phải để bôi lòe loẹt khi hỏi. Thực sự chữ màu đẹp thì đẹp thật, Nhưng nếu bạn không biết sử dụng thì rất bẩn + phản cảm
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  9. #9
    Ngày gia nhập
    05 2011
    Nơi ở
    TP HCM
    Bài viết
    27

    Trích dẫn Nguyên bản được gửi bởi lonelystar021292 Xem bài viết
    T mới nghĩ ra cách làm này post lên hỏi ý kiến mọi ng xem đúng ko...mọi ng cho ý kiến nhé

    Code:
    int demnutla (node pTree)
    {
    	if (isEmpty(pTree))
    	return NULL;
    	int dem1, dem2, dem;
    	dem1=dem2=0;
    	while (pTree->left==NULL)
    	{
    		dem1++;
    	}
    	while (pTree->right==NULL)
    	{
    	        dem2++;
    	}
    	dem=dem1+dem2;
    	return dem;
    }
    mình không biết bạn có cho chạy hàm chưa nhưng nhìn qua là thấy sẽ bị lặp vô tận rồi !

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