第五章学习小结

第五章主要学习的是树与二叉树,有利用数组进行存储的顺序二叉树,也有利用链表进行存储的链式二叉树,在这个基础上又展开了二叉树的遍历。

二叉树的遍历分为前序遍历,中序遍历以及后序遍历,主要区别在于遍历的顺序不同。

前序遍历:

(1)访问根结点。
(2)前序遍历左子树
(3)前序遍历右子树 。
中序遍历:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
后序遍历:
1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点

哈夫曼树的构造

在森林中选两棵根节点权值最小的树作为左右子树构造一颗新的二叉树,新根的权值为左右子树根结点的和,在森林中删除这两棵树,重复操作

关于上次确定的目标及接下来的目标

专心复习,好好准备一下小测

以下是深入虎穴题目的相关代码:

(在自己钻研了一节课以及参考了一下网络上的思路之后,完成的结果)

 1 #include<iostream>
 2 #include<queue>
 3 #include<vector>
 4 #include<cstring>
 5 using namespace std;
 6 
 7 const int maxn = 100009;
 8 queue <int> qu;
 9 vector <int> v[maxn];
10 int check[maxn];
11 
12 int main()
13 {
14     int i, n, child, num_child, root=-1;
15     memset(check, 0, sizeof(check));//memset函数,将数组元素初始化为0
16     cin>>n;//输入节点个数
17     for(i=1; i<=n; i++){
18         cin>>num_child;//输入孩子个数 
19         while(num_child-- != 0){
20             cin>>child;//输入孩子 
21             check[child]++;
22             v[i].push_back(child);//将孩子存入vector v中;动态二维数组 
23         }
24     }
25     
26     for(i=1; i<=n; i++){
27         if(check[i] == 0){
28             root = i;
29             break;
30         }
31     }
32     qu.push(root);//根节点入队
33     while(qu.size() != 0){
34         root = qu.front();//定位到当前队头元素x
35         qu.pop();//队头元素x出队
36         for(i=0; i<v[root].size(); i++){
37             qu.push(v[root][i]);//x的子节点入队
38         }
39     } 
40     cout<<root;
41     return 0;
42 }

 

posted on 2019-05-04 23:00  陆佑蓝  阅读(167)  评论(1)    收藏  举报

导航