【二叉树】二叉树的宽度

【二叉树】二叉树的宽度,第1张

空说无益,上题分析!

Description
二叉树的宽度指的是具有节点数目最多的那一层的节点个数。


1 / \ 2 3 / 4 答案为2, 第二层节点数最多,为2个节点。




  输入格式
共n行。


第一行一个整数n,表示有n个结点,编号为1至n,结点1为树根。


(1<=n<=50) 第二行至第n行,每行有两个整数x和y,表示在二叉树中x为y的父节点。


x第一次出现时y为左孩子


输出格式
输出二叉树的宽度。


  输入样例
5
1 2
1 3
2 4
2 5
  输出样例
2

显然,只需要层次遍历即可求出最宽的那一层;

思路就是用两个队列;

 

代码如下:

//二叉树的宽度
#include 
#include 
#include 
#include 
using namespace std;
int st[20][3];
int n;
queue temp1;   //存放结点
queue temp2;   //辅助
int ans;
void dfs(int root){
    if(temp1.empty()){
        return ;
    }
    int size = temp1.size();
    ans = max(ans,size);
    while(!temp1.empty()){
        int pos = temp1.front();
        if(st[pos][1]!=0){
            temp2.push(st[pos][1]);
        }
        if(st[pos][2]!=0){
            temp2.push(st[pos][2]);
        }
        temp1.pop();
    }
    temp1.swap(temp2);
    dfs(temp1.front());//对下一层遍历
}
int main(){
    cin>>n;
    st[1][0] =1;
    for(int i=1;i>root>>child;
        if(st[root][1]==0){
            st[root][1] = child;
            st[st[root][1]][0] = child;
        }else{
            st[root][2] = child;
            st[st[root][2]][0] = child;
        }
    }
    temp1.push(1);  //放入根结点,这里默认树是存在的
    dfs(temp1.front());
    cout<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)