pat甲級 1115 Counting Nodes in a BST (30 分)(平衡二叉樹)

題目鏈接:傳送門

思路:使用結構體構建二叉樹結構,然後模擬平衡二叉樹過程即可,最後記錄第一大和第二大的節點的數量即可,代碼寫醜了,可以直接用數組表示二叉樹每層的節點數的。。

代碼:

#include <bits/stdc++.h>

using namespace std;

const int maxn = 1005;

struct node{
	int data;
	int left , right;
	node() {
		left = right = -1;
	}
}tree[maxn];

int n , p;
int a[maxn];
int b[maxn];


int m_insert(int pos , int d , int level) {
	if(pos != -1) {
		if(d <= tree[pos].data) {
			tree[pos].left = m_insert(tree[pos].left , d  , level + 1);
		}
		else {
			tree[pos].right = m_insert(tree[pos].right , d , level + 1);
		}
		return pos;
	}
	else {
		tree[++p].data = d;
		b[p] = level;
		return p;
	} 
}


int main() {
	ios::sync_with_stdio(0);
	cin >> n; 
	int t;
	cin >> t;
	tree[0].data = t;
	for(int i = 1 ; i < n ; i++) {
		cin >> t;
		m_insert(0 , t , 1);
	}
	sort(b , b + n);
	int ans = 0 , ans1 = 0 , i;
	t = b[n - 1];
	for(i = n - 1 ; i >= 0 && t == b[i] ; i--) {
		ans++;
	}
	if(i >= 0)t = b[i];
	for(; i >= 0 && t == b[i] ; i--)ans1++;
	cout << ans << " + " << ans1 << " = " << ans + ans1 << "\n"; 
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章