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;
}

猜你喜欢

转载自blog.csdn.net/qq_39475280/article/details/102965557
今日推荐