头文件(bitree.hpp)

  1 #pragma
  2 #include<iostream>
  3 #include<queue>
  4 #include<vector>
  5 #include<stack>
  6 using namespace std;
  7 struct TreeNode
  8 {
  9     int NodeData;
 10      TreeNode *pLeft;
 11      TreeNode *pRight;
 12     TreeNode(int x) :NodeData(x), pLeft(NULL),pRight(NULL) {}
 13 };
 14 class Mytree
 15 {
 16 public:
 17     void insertTree(TreeNode* proot,int n)
 18     {
 19 
 20     }
 21     void PreOrderno(TreeNode *T)//前序遍历,递归
 22     {
 23         if (!T)
 24             return;
 25         if (T)
 26         {
 27             cout << T->NodeData << endl;
 28             PreOrderno(T->pLeft);
 29             PreOrderno(T->pRight);
 30             
 31         }
 32 
 33     }
 34     void PreOrder(TreeNode *T)//非递归,前序遍历
 35     {
 36         if (T == NULL)
 37         {
 38             return;
 39         }
 40         stack<TreeNode*>s;
 41         s.push(T);
 42         TreeNode *temp;
 43         while (!s.empty())
 44         {
 45             temp = s.top();
 46             cout << temp->NodeData;
 47             s.pop();
 48             if (temp->pLeft)
 49             {
 50                 s.push(temp->pLeft);
 51             }
 52             if (temp->pRight)
 53             {
 54                 s.push(temp->pRight);
 55             }
 56         }
 57     }
 58 
 59     void InOrder(TreeNode *T)//中序遍历
 60     {
 61         if (!T)
 62             return;
 63         InOrder(T->pLeft);
 64         cout << T->NodeData;
 65         InOrder(T->pRight);
 66     }
 67 
 68     void PostOrder(TreeNode *T)//后序遍历
 69     {
 70         if (!T)
 71             return;
 72         PostOrder(T->pLeft);
 73         PostOrder(T->pRight);
 74         cout << T->NodeData;
 75     }
 76     void Levelorder(TreeNode *T)//层析遍历
 77     {
 78         if (!T)
 79             return;
 80         TreeNode *temp;
 81         queue<TreeNode*>q;
 82         q.push(T);
 83         while (!q.empty())
 84         {
 85             temp = q.front();
 86             cout << temp->NodeData;
 87             if (temp->pLeft)
 88                 q.push(temp->pLeft);
 89             if (temp->pRight)
 90                 q.push(temp->pRight);
 91             q.pop();
 92         }
 93     }
 94     void DeepOrder(TreeNode *T)//深度遍历
 95     {
 96         if (!T)
 97             return;
 98         TreeNode *temp;
 99         stack<TreeNode*>s;
100         s.push(T);
101         while (!s.empty())   
102         {
103             temp = s.top();
104             cout << temp->NodeData;
105             s.pop();
106             if (temp->pLeft)
107                 s.push(temp->pLeft);
108             if (temp->pRight)
109                 s.push(temp->pRight);
110         }
111     }
112 private:
113 
114 };   
 1 #include "bitree.hpp"
 2 int main()
 3 {
 4     Mytree mytree;
 5     TreeNode *pRoot;
 6 
 7     TreeNode node1(1);
 8     TreeNode node2(2);
 9     TreeNode node3(3);
10     TreeNode node4(4);
11     TreeNode node5(5);
12     TreeNode node6(6);
13     TreeNode node7(7);
14     TreeNode node8(8);    
15     pRoot = &node1;
16     node1.pLeft = &node2;
17     node1.pRight = &node3;
18     node2.pLeft = &node4;
19     node2.pRight = &node5;
20     node3.pLeft = &node6;
21     node3.pRight = &node7;
22     node4.pLeft = &node8;
23     //深度遍历
24     cout << "前序遍历:" << endl;
25     mytree.PreOrderno(pRoot);
26     cout << "深度遍历:" << endl;
27     mytree.DeepOrder(pRoot);
28     cout << "中序遍历:" << endl;
29     mytree.InOrder(pRoot);
30     cout << "层析遍历:" << endl;
31     mytree.Levelorder(pRoot);
32     cout << "前序非递归遍历:" << endl;
33 
34     mytree.PreOrder(pRoot);
35     cout << "后续遍历:" << endl;
36     mytree.PostOrder(pRoot);
37 
38 }