zoukankan      html  css  js  c++  java
  • [wikioi]二叉树最大宽度和高度

    简单的DFS,用数组w记录每一层的宽度就行了,就是遇到一层就++。中间发现在C++里面,如果int未初始化就是用也是有异常的。还有二叉树的数组表示时,从1开始计数会比较好。还有后来学会了数组这样的初始化为0的方法:int l[100] = {0},r[100] = {0};

    #include <iostream>
    using namespace std;
    int l[20];
    int r[20];
    int w[20];
    int dfs(int level, int node)
    {
    	w[level]++;
    	if (l[node] == 0 && r[node] == 0) return 1;
    	int dl = 0;
    	int dr = 0;
    	if (l[node] != 0) {
    		dl = dfs(level+1, l[node]);
    	}
    	if (r[node] != 0) {
    		dr = dfs(level+1, r[node]);
    	}
    	int max = dl > dr ? dl : dr;
    	return max+1;
    }
    
    int main()
    {
    	int n;
    	cin >> n;
    
    	for (int i = 1; i <= n; i++)
    	{
    		cin >> l[i] >> r[i];
    	}
    	int dmax = dfs(1, 1);
    	int wmax = 0;
    	for (int i = 0; i <= dmax; i++)
    	{
    		if (w[i] > wmax) wmax = w[i];
    	}
    	cout << wmax << " " << dmax;
    }
    	
    

      

  • 相关阅读:
    python模拟shell
    10.LIKE 操作符
    9.TOP 子句--mysql limit
    8.INSERT INTO 语句 UPDATE 语句
    7.ORDER BY 子句
    6.AND & OR 运算符
    5.WHERE 子句
    4.SELECT DISTINCT 语句
    3.SELECT 语句
    2.sql分类
  • 原文地址:https://www.cnblogs.com/lautsie/p/3273683.html
Copyright © 2011-2022 走看看