Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: Binary tree

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

    Mặc định Binary tree

    C++ Code:
    1. #include <iostream>
    2. #include <queue> //// Use Queue is available in C ++
    3.  
    4. using namespace std;
    5.  
    6. // create one node of the tree
    7. struct CTreeNode {
    8.     int Key;
    9.     CTreeNode* Left;
    10.     CTreeNode* Right;
    11.  
    12.     CTreeNode(int _key) : Key(_key),
    13.         Left(0), Right(0) {}
    14. };
    15.  
    16. class Tree {
    17. public:
    18.     Tree();
    19.     ~Tree();
    20.     CTreeNode* Root() { return root; };
    21.     void addNode(int key);
    22.     void levelOrder();
    23. private:
    24.     void addNode(int key, CTreeNode* leaf);
    25.     void freeNode(CTreeNode* leaf);
    26.     CTreeNode* root;
    27. };
    28.  
    29. Tree::Tree() {
    30.     root = 0;
    31. }
    32.  
    33. Tree::~Tree() {
    34.     freeNode(root);
    35. }
    36.  
    37.  
    38.  
    39. void Tree::freeNode(CTreeNode* leaf)
    40. {
    41.     if (leaf != 0)
    42.     {
    43.         freeNode(leaf->Left);
    44.         freeNode(leaf->Right);
    45.         delete leaf;
    46.     }
    47. }
    48.  
    49. void Tree::addNode(int key) {
    50.     if (root == 0) {
    51.         CTreeNode* n = new CTreeNode(key);
    52.         root = n;
    53.     }
    54.     else {
    55.         addNode(key, root);
    56.     }
    57. }
    58.  
    59. void Tree::addNode(int key, CTreeNode* leaf)
    60. {
    61.     if (key <= leaf->Key) {
    62.         if (leaf->Left != 0)
    63.             addNode(key, leaf->Left);
    64.         else
    65.         {
    66.             CTreeNode* n = new CTreeNode(key);
    67.             leaf->Left = n;
    68.         }
    69.     }
    70.     else {
    71.         if (leaf->Right != 0)
    72.             addNode(key, leaf->Right);
    73.         else {
    74.             CTreeNode* n = new CTreeNode(key);
    75.             leaf->Right = n;
    76.         }
    77.     }
    78. }
    79.  
    80.  
    81.  
    82. // Traversing the tree in width
    83.  
    84. void Tree::levelOrder() {
    85.  
    86.     queue<CTreeNode*> q;
    87.  
    88.     q.push(root);
    89.  
    90.     while (!q.empty())
    91.     {
    92.         CTreeNode* p = q.front(); // take the surrender value
    93.         cout << p->Key << " ";  // print key
    94.         if (p->Left != 0)
    95.             q.push(p->Left);
    96.  
    97.         if (p->Right != 0)
    98.             q.push(p->Right);
    99.  
    100.         q.pop();
    101.     }
    102. }
    103.  
    104. int main()
    105. {
    106.     Tree* tree = new Tree();
    107.  
    108.     int N;
    109.     cin >> N;
    110.     int K;
    111.  
    112.     for (int i = 0; i < N; i++)
    113.     {
    114.         cin >> K;
    115.         tree->addNode(K);
    116.     }
    117.     tree->levelOrder();
    118.    
    119.  
    120.     //system("pause");
    121.     return 0;
    122. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi MHoang : 30-11-2016 lúc 09:43 AM. Lý do: Đưa vào khung mã

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