1115 Counting Nodes in a Binary Search Tree(30分)

题目翻译:

给定一组序列,请建立二叉搜索树

题解思路:

注意是二叉搜索树BST,而非平衡二叉树AVL,两者的区别如下:

  • BST:

  • AVL: 

因此只需要采用常规的建树手段即可,需要注意的是什么时候采用指针,什么时候不采用指针类型更好:

对于类似这种左右子树的值都已给出的话采用非指针建树更好(用一个结构体数组来存储)

而对于给定一串序列让你建立这个树(没有点明左右孩子关系的话),采用指针类型结构体更好:

代码:

#include<bits/stdc++.h>
using namespace std;
int N;
vector<int> lev[1001];

struct node {
	int val = 0;
	node* left, *right;
	node() {
		left = nullptr;
		right = nullptr;
	}
};

node* insert(node* root, int num, int curlev)
{
	if (root == nullptr)
	{
		root = new node();
		root->val = num;
		lev[curlev].push_back(num);
		return root;
	}
	if (num <= root->val)
		root->left = insert(root->left, num, curlev + 1);
	else
		root->right = insert(root->right, num, curlev + 1);
	return root;
}

int main()
{
	int temp;
	cin >> N ;
	node* root = nullptr;
	for (int i = 0;i < N;i++)
	{
		cin >> temp;
		root = insert(root, temp, 0);
	}
	int result = 0;
	while (lev[result].size())
		result++;
	if (result == 1)
		cout << lev[result - 1].size() << " + " << 0 << " = " << lev[result - 1].size();
	else
	    cout << lev[result - 1].size() << " + " << lev[result - 2].size() << " = " << lev[result - 2].size() + lev[result - 1].size();
}

坑点:

注意测试点3,4可能是因为你的深度数组开太小了,最好开到1000+10

测试点5:注意可能是因为只有一层的缘故,所以倒数第二层为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值