树和二叉树

Posted 浮生缘,半生梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树和二叉树相关的知识,希望对你有一定的参考价值。

编程语言:c++

截图展示:

 

 

代码如下:

main.cpp

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <stdlib.h>
  4 #include <queue>
  5 #include <stack>
  6 #include <windows.h>
  7 #include "show.cpp"
  8 #include "jiegou.cpp"
  9 #include "shuru.cpp"
 10 #include "zhuan.cpp"
 11 #include "dfs.cpp"
 12 using namespace std;
 13 
 14 int main()
 15 {  int n;
 16    system("color 0D");
 17    tree* h;
 18    btree* node;
 19      while(1)
 20      {
 21         see();
 22         cin>>n;
 23         getchar();
 24         if(n==1)
 25         {
 26              system("cls");
 27              h=creats();
 28               gen(h);
 29               cout<<endl<<endl;
 30               cout<<"建树完成了"<<endl<<endl;
 31               cout<<"--按任意返回进行其他操作"<<endl;
 32               getchar();
 33               system("cls");
 34               continue;
 35         }
 36         else if(n==2)
 37         {    system("cls");
 38              node=zhuan(h);
 39              cout<<endl<<endl;
 40               cout<<"已经成功转换为二叉树"<<endl<<endl;
 41               cout<<"--按任意返回进行其他操作"<<endl;
 42               getchar();
 43               system("cls");
 44               continue;
 45         }
 46         else if(n==3)
 47         {
 48               cout<<"前序遍历结果为:"<<endl;
 49                dfs1(node);
 50                cout<<endl<<endl;
 51               cout<<"--按任意返回进行其他操作"<<endl;
 52               getchar();
 53               system("cls");
 54               continue;
 55         }
 56         else if(n==4)
 57         {
 58                cout<<"中序遍历结果为:"<<endl;
 59                dfs2(node);
 60                cout<<endl<<endl;
 61                cout<<"--按任意返回进行其他操作"<<endl;
 62                getchar();
 63                system("cls");
 64                continue;
 65         }
 66         else if(n==5)
 67         {
 68                cout<<"后序遍历结果为:"<<endl;
 69                dfs3(node);
 70                cout<<endl<<endl;
 71                cout<<"--按任意返回进行其他操作"<<endl;
 72               getchar();
 73               system("cls");
 74               continue;
 75         }
 76         else if(n==6)
 77         {
 78               cout<<"非递归前序遍历结果为:"<<endl;
 79                dfs4(node);
 80                cout<<endl<<endl;
 81               cout<<"--按任意返回进行其他操作"<<endl;
 82               getchar();
 83               system("cls");
 84               continue;
 85         }
 86         else if(n==7)
 87         {
 88              cout<<"非递归中序序遍历结果为:"<<endl;
 89                dfs5(node);
 90                cout<<endl<<endl;
 91               cout<<"--按任意返回进行其他操作"<<endl;
 92               getchar();
 93               system("cls");
 94               continue;
 95         }
 96         else if(n==8)
 97         {
 98              cout<<"非递归后序遍历结果为:"<<endl;
 99                dfs6(node);
100                cout<<endl<<endl;
101               cout<<"--按任意返回进行其他操作"<<endl;
102               getchar();
103               system("cls");
104               continue;
105         }
106         else if(n==9)
107         {
108              cout<<"层次遍历结果为:"<<endl;
109                dfs7(node);
110                cout<<endl<<endl;
111               cout<<"--按任意返回进行其他操作"<<endl;
112               getchar();
113               system("cls");
114               continue;
115         }
116         else if(n==10)
117         {
118               system("cls");
119               cout<<"感谢使用,下次再见"<<endl;
120               Sleep(100);
121               break;
122         }
123         else
124         {   cout<<endl<<endl;
125             cout<<"输入选项错误"<<n<<endl<<endl;
126             cout<<"--按任意键返回重新输入"<<endl;
127             getchar();
128             system("cls");
129 
130         }
131      }
132     return 0;
133 }

show.cpp

 1 using namespace std;
 2 void see()
 3 {
 4   printf("   %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c\\n",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3);
 5   printf("   %c                                                                    %c\\n",3,3);
 6   printf("   %c                                                                    %c\\n",3,3);
 7   printf("   %c       ---------  树与二叉树的转换及其遍历  ---------               %c\\n",3,3);
 8   printf("   %c                                                                    %c\\n",3,3);
 9   printf("   %c                                          -计科二班 刘家树%c         %c\\n",3,1,3);
10   printf("   %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c\\n",3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3);
11   printf("%c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c\\n",4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4);
12   printf("%c                                                                          %c\\n",4,4);
13   printf("%c             1、开始建树                     2、转换为二叉树              %c\\n",4,4);
14   printf("%c                                                                          %c\\n",4,4);
15   printf("%c             3、前序遍历                     4、中序遍历                  %c\\n",4,4);
16   printf("%c                                                                          %c\\n",4,4);
17   printf("%c             5、后序遍历                     6、非递归前序                %c\\n",4,4);
18   printf("%c                                                                          %c\\n",4,4);
19   printf("%c             7、非递归中序                   8、非递归后序                %c\\n",4,4);
20   printf("%c                                                                          %c\\n",4,4);
21   printf("%c             9、层次遍历                     10、运行结束                 %c\\n",4,4);
22   printf("%c                                                                          %c\\n",4,4);
23   printf("%c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c  %c\\n",4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4);
24   cout<<endl;
25   cout<<"-----------恭候您的选择,请直接用键盘输入选项------------"<<endl;
26   cout<<"您的选择是:";
27 }

shuru.cpp

 1 tree* creats()
 2 {
 3     tree *h;
 4     h=(tree*)malloc(sizeof(tree));
 5     cout<<"输入结点值"<<endl;
 6     cin>>h->value;
 7     h->n=0;
 8     h->next=NULL;
 9     h->child=NULL;
10     if(h->value==\'#\')
11     return h;
12     cout<<"输入孩子数"<<endl;
13     cin>>h->n;
14     getchar();
15     h->child=(tree**)malloc(sizeof(tree*));
16     for(int i=0;i<h->n;i++)
17     h->child[i]=creats();
18     return h;
19 }

jiegou.cpp

 1 struct tree
 2 {
 3     char value;
 4     int n;
 5     tree **child;
 6     tree *next;
 7 };
 8 struct btree
 9 {
10     char value;
11     btree* left;
12     btree* right;
13 };

zhuan.cpp

 1 void gen(tree* h)
 2 {
 3     if(h==NULL||h->value==\'#\')
 4     return ;
 5     //cout<<h->value<<endl;
 6     for(int i=0;i<h->n;i++)
 7     {   if(i+1<h->n)
 8         h->child[i]->next=h->child[i+1];
 9         gen(h->child[i]);
10     }
11 }
12 btree* creatb()
13 {
14     btree *h;
15     h=(btree *)malloc(sizeof(btree));
16     h->left=NULL;
17     h->right=NULL;
18     h->value=\'#\';
19     return h;
20 }
21 btree* zhuan(tree* h)
22 {
23     if(h==NULL)
24     return NULL;
25     btree* node=creatb();
26     node->value=h->value;
27    // cout<<h->value<<endl;
28     if(h->n!=0)
29     node->left=zhuan(h->child[0]);
30     node->right=zhuan(h->next);
31     return node;
32 }

dfs.cpp

 1 void dfs1(btree *h)//前序
 2 {
 3     if(h!=NULL)
 4     {
 5         cout<<h->value<<" ";
 6         dfs1(h->left);
 7         dfs1(h->right);
 8     }
 9 }
10 void dfs2(btree *h)//中序
11 {
12     if(h!=NULL)
13     {
14         dfs2(h->left);
15         cout<<h->value<<" ";
16         dfs2(h->right);
17     }
18 }
19 void dfs3(btree *h)//后序
20 {
21     if(h!=NULL)
22     {
23         dfs3(h->left);
24         dfs3(h->right);
25         cout<<h->value<<" ";
26     }
27 }
28 void dfs4(btree *h)//非递归前序
29 {
30     stack<btree*> s;
31     s.push(h);
32     while(!s.empty())
33     {
34         h=s.top();
35         s.pop();
36         cout<<h->value<<" ";
37         if((h->right)!=NULL)
38         s.push(h->right);
39         if((h->left)!=NULL)
40         s.push(h->left);
41     }
42 }
43 void dfs5(btree *h)//非递归中序
44 {
45     stack<btree*> s;
46     s.push(h);
47     while(!s.empty())
48     {
49         if((h->left)!=NULL)
50         s.push(h->left);
51         h=s.top();
52         s.pop();
53         cout<<h->value<<" ";
54         if((h->right)!=NULL)
55         s.push(h->right);
56     }
57 }
58 void dfs6(btree *h)//非递归后序
59 {
60   if(h!=NULL)
61     {
62         dfs6(h->left);
63         dfs6(h->right);
64         cout<<h->value<<" ";
65     }
66 }
67 void dfs7(btree *h)//层次
68 {
69     queue<btree*> q;
70     q.push(h);
71     while(!q.empty())
72     {   h=q.front();
73         q.pop();
74         cout<<h->value<<" ";
75         if((h->left)!=NULL)
76         q.push(h->left);
77         if((h->right)!=NULL)
78         q.push(h->right);
79     }
80 }

 

以上是关于树和二叉树的主要内容,如果未能解决你的问题,请参考以下文章

C/C++数据结构-完整代码队列Queue(树和二叉树)(二叉树代码实现)

数据结构学习笔记——广义表树和二叉树的基本知识

数据结构学习笔记——广义表以及树和二叉树的基本知识

二叉树和二叉搜索树

四:树和二叉树

C/C++数据结构-完整代码队列Queue(树和二叉树)(二叉树代码实现)