zoukankan      html  css  js  c++  java
  • [数据结构] 二叉树

      1 数据结构的练习与巩固
      2 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      3 #include <iostream>
      4 using namespace std;
      5 
      6 struct BTNode
      7 {
      8     char Data;
      9     BTNode* lChild, * rChild;
     10     BTNode()
     11     {
     12         lChild = NULL;
     13         rChild = NULL;
     14     }
     15     BTNode(char& data, BTNode* l = NULL, BTNode* r = NULL)
     16     {
     17         Data = data;
     18         lChild = l;
     19         rChild = r;
     20     }
     21 };
     22 
     23 class BT
     24 {
     25 public:
     26     BTNode* root;
     27     char RefValue;
     28 
     29 public:
     30     BT() { root = NULL; }
     31     BT(char value)
     32         { RefValue = value, root = NULL; }
     33 
     34     BTNode* lChild(BTNode* t)
     35         { return(t != NULL) ? t->lChild : NULL; }
     36     BTNode* rChild(BTNode* t)
     37         { return(t != NULL) ? t->lChild : NULL; }
     38     BTNode*& getRoot()
     39         { return root; }
     40 
     41     bool IsEmpty()
     42         { return root == NULL; }
     43 
     44     void preOrder(BTNode*& subTree)
     45     {
     46         if (subTree != NULL)
     47         {
     48             cout << subTree->Data << ' ';
     49             preOrder(subTree->lChild);
     50             preOrder(subTree->rChild);
     51         }
     52     }
     53     void inOrder(BTNode*& subTree)
     54     {
     55         if (subTree != NULL)
     56         {
     57             inOrder(subTree->lChild);
     58             cout << subTree->Data << ' ';
     59             inOrder(subTree->rChild);
     60         }
     61     }
     62     void postOrder(BTNode*& subTree)
     63     {
     64         if (subTree != NULL)
     65         {
     66             postOrder(subTree->lChild);
     67             postOrder(subTree->rChild);
     68             cout << subTree->Data << ' ';
     69         }
     70     }
     71 
     72     void createBT(BTNode*& subTree)
     73     {
     74         char ch;
     75         cin >> ch;
     76         if (ch == RefValue)subTree = NULL;
     77         else
     78         {
     79             subTree = new BTNode(ch);
     80             createBT(subTree->lChild);
     81             createBT(subTree->rChild);
     82         }
     83     }
     84     
     85     void size(BTNode*& subTree, int& count)
     86     {
     87         if (subTree != NULL)
     88         {
     89             count++;
     90             size(subTree->lChild, count);
     91             size(subTree->rChild, count);
     92         }
     93         else
     94             return;
     95     }
     96 
     97     void leaf(BTNode*& subTree, int& count)
     98     {
     99         if (subTree != NULL)
    100         {
    101             if (subTree->lChild == NULL && subTree->rChild == NULL)
    102             {
    103                 count++;
    104                 return;
    105             }
    106             else
    107             {
    108                 leaf(subTree->lChild, count);
    109                 leaf(subTree->rChild, count);
    110             }
    111         }
    112 
    113         else return;
    114     }
    115 
    116     void IsBST(BTNode*& subTree, int& Flag)
    117     {
    118         if (subTree != NULL)
    119         {
    120             if (subTree->lChild == NULL && subTree->lChild == NULL)
    121             {
    122                 return;
    123             }
    124 
    125             if (subTree->lChild == NULL)
    126             {
    127                 if (subTree->rChild->Data < subTree->Data) Flag = 0;
    128                 IsBST(subTree->rChild, Flag);
    129             }
    130 
    131             if (subTree->rChild == NULL)
    132             {
    133                 if (subTree->lChild->Data > subTree->Data) Flag = 0;
    134                 IsBST(subTree->lChild, Flag);
    135             }
    136 
    137             else
    138             {
    139                 if (subTree->lChild->Data > subTree->Data) Flag = 0;
    140                 if (subTree->rChild->Data < subTree->Data) Flag = 0;
    141 
    142                 IsBST(subTree->lChild, Flag);
    143                 IsBST(subTree->rChild, Flag);
    144             }
    145         }
    146     }
    147 
    148     void height(BTNode*& subTree, char X, int& Height)
    149     {
    150         if (subTree != NULL)
    151         {
    152             if (subTree->Data == X)
    153             {
    154                 return;
    155             }
    156             else if (subTree->Data > X)
    157             {
    158                 Height++;
    159                 height(subTree->lChild, X, Height);
    160             }
    161             else if (subTree->Data < X)
    162             {
    163                 Height++;
    164                 height(subTree->rChild, X, Height);
    165             }
    166         }
    167     }
    168 };
    169 
    170 int main()
    171 {
    172     int c1 = 0;
    173     int c2 = 0;
    174     int Height = 1;
    175     int Flag = 1;
    176     BT t('#');
    177     t.createBT(t.getRoot());
    178 
    179     cout << endl << "前序遍历" << endl;
    180     t.preOrder(t.getRoot());
    181     cout << endl << "中序遍历" << endl;
    182     t.inOrder(t.getRoot());
    183     cout << endl << "后序遍历" << endl;
    184     t.postOrder(t.getRoot());
    185 
    186     t.size(t.getRoot(), c1);
    187     cout << endl << "结点个数:" << c1 << endl;
    188     t.leaf(t.getRoot(), c2);
    189     cout << endl << "叶子个数:" << c2 << endl;
    190 
    191     t.IsBST(t.getRoot(), Flag);
    192     if (Flag) cout << "是排序树" << endl;
    193     else cout << "非排序树" << endl;
    194 
    195     char X;
    196     cin >> X;
    197     t.height(t.getRoot(), X, Height);
    198     cout << endl << "当前高度:" << Height << endl;
    199 }
  • 相关阅读:
    双机信任关系
    VCS双机原理
    VCS常用指令
    TCL数组
    TCL数据类型
    TCL列表
    TCL基本语法
    CentOS防火墙中端口的开启和关闭
    会话保持技术及原理技术
    ESN
  • 原文地址:https://www.cnblogs.com/nagishiro/p/13236747.html
Copyright © 2011-2022 走看看