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

2023-11-05 13:28

本文主要是介绍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);elseroot->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();elsecout << lev[result - 1].size() << " + " << lev[result - 2].size() << " = " << lev[result - 2].size() + lev[result - 1].size();
}

坑点:

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

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

这篇关于1115 Counting Nodes in a Binary Search Tree(30分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350164

相关文章

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

树(Tree)——《啊哈!算法》

树 什么是树?树是一种特殊的图,不包含回路的连通无向树。 正因为树有着“不包含回路”这个特点,所以树就被赋予了很多特性。 一棵树中的任意两个结点有且仅有唯一的一条路径连通。一棵树如果有n个结点,那么它一定恰好有n-1条边。在一棵树中加一条边将会构成一个回路。 一棵树有且只有一个根结点。 没有父结点的结点称为根结点(祖先)。没有子结点的结点称为叶结点。如果一个结点既不是根结点也不是叶

JavaScript正则表达式六大利器:`test`、`exec`、`match`、`matchAll`、`search`与`replace`详解及对比

在JavaScript中,正则表达式(Regular Expression)是一种用于文本搜索、替换、匹配和验证的强大工具。本文将深入解析与正则表达式相关的几个主要执行方法:test、exec、match、matchAll、search和replace,并对它们进行对比,帮助开发者更好地理解这些方法的使用场景和差异。 正则表达式基础 在深入解析方法之前,先简要回顾一下正则表达式的基础知识。正则

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

226 Invert Binary Tree

//226 Invert Binary Tree//算法思路:主要使用递归算法public class Solution {public TreeNode invertTree(TreeNode root) {//1 出口 空节点if (root==null)return null;//2 递归 调用自己TreeNode left = root.left;TreeNode right = ro