首先先复习一下什么叫做二叉树的最大宽度和高度?
本题就当做练手复习题了,也就老老实实地写DFS搜索咯。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #define max(a,b) (a>b?a:b); #define size=1000; using namespace std; int node[size][2]; //结点的数量 int maxhh; //这里maxhh用来记录 最大高度 int num[size]; //num用来记录每层高度结点的最多数量 void dfs(int x,int depth) //树的编号和高度 { maxh=max(maxh,depth) //用来比较当前树的高度和上一个树的高度谁大 num[depth]++; //对当前高度上的结点进行一次记录 if(node[x][0]) dfs(node[x][0],depth+1); //如果当前结点的左儿子不为空那么就DFS if(node[x][1]) dfs(node[x][1],depth+1); //如果当前结点的右儿子不为空就继续往下面走 } int main(){ int n,maxnn=0; cin>>n; //输入 for(int i=1;i<=n;++i) cin>>node[i][0]>>node[i][1]; dfs(1,1); //搜索开始 for(int i=1;i<=n;++i) maxnn=max(maxnn,num[i]) //把每层的树的宽度和当前的最大宽度进行比较 cout<<maxnn<<" "<<maxhh; return 0; }