本文共 918 字,大约阅读时间需要 3 分钟。
此题要求求出树的最大宽度和高度。首先明确什么是二叉树:每个节点最多有两个孩子,而且左右孩子有区别。在借鉴了其他csdn博客,了解到此题主要考察深度优先搜索。数据存储方式按照题目格式来,建立二维数组。(在草稿纸上画出来二维数组内容更容易理解数据以及调用方式。)深度则一层层深搜即可。宽度的话,在深搜过程中记录每一层的访问次数,就是该层的宽度啦,保存在数组中,最后求最大宽度即可。深搜的过程中记录当前层的宽度,我觉得是此题简洁题解的巧妙之处。每次深搜访问到一层,说明该层有节点,则宽度加一。另外,注意输出的格式,在一行上。
#includeusing namespace std;int tree[20][2], depth = 0, width[20];void deep_search(int node, int floor) //floor当前层数 { if(floor > depth) depth = floor; //更新深度 width[floor] ++; //更新当前层宽度 int lchild = tree[node][0], rchild = tree[node][1]; if(lchild != 0) deep_search(lchild, floor + 1); if(rchild != 0) deep_search(rchild, floor + 1);}int main(){ int n, wid = 0, lchild, rchild; //层数,左右孩子编号 cin >> n; for(int i = 1; i <= n; i ++) cin >> tree[i][0] >> tree[i][1]; deep_search(1, 1); for(int i = 1; i <= 19; i ++) if(width[i] > wid) wid = width[i]; cout << wid << " " << depth; return 0;}
转载地址:http://mkuin.baihongyu.com/