1115. Counting Nodes in a BST (30)[bst+dfs遍历]

2023-12-02 15:58
文章标签 遍历 30 dfs counting nodes 1115 bst

本文主要是介绍1115. Counting Nodes in a BST (30)[bst+dfs遍历],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 原题: https://www.patest.cn/contests/pat-a-practise/1115

2. 思路:

题意:
按照bst的原则构建bst树,然后输出倒数两层的结点数。
思路:
显然首先递归插入来建树。
然后树深可以用bfs或dfs。
dfs简捷些,然后递归的时候用一个计数器数组记录层深的结点数和最大树深就好了。
已AC。

3. 源码:

#include<iostream>
using namespace std;struct Node
{Node() : left(NULL), right(NULL) {}int data;Node *left, *right;
};
Node *T = NULL;//bst树的根
int cnt[1000] = { 0 };//记录某深度所在层的结点数
int maxn = -1;//记录最大深度void Insert(Node *&t, int d);//构建bst树
void dfs(Node *nod, int deep);//递归获取树深并更新每层数目int main(void)
{//freopen("in.txt", "r", stdin);int N;scanf("%d", &N);for (int i = 0; i < N; i++){int elem;scanf("%d", &elem);Insert(T, elem);//建树}dfs(T, 0);//递归遍历printf("%d + %d = %d\n", cnt[maxn], cnt[maxn - 1], cnt[maxn] + cnt[maxn - 1]);return 0;
}void Insert(Node *&t, int d)//构建bst树, 注意参数是指针的指针(要修改指针)
{if (t == NULL)//递归结束条件{t = new Node;t->data = d;}else if (d <= t->data)//插入左侧Insert(t->left, d);else//插入右侧Insert(t->right, d);return;
}void dfs(Node *nod, int deep)//递归获取树深并更新每层数目
{if (nod == NULL)//递归终止return;dfs(nod->left, deep + 1);//递归左dfs(nod->right, deep + 1);//递归右cnt[deep]++;//累加if (deep > maxn)//更新最大树深maxn = deep;return;
}


这篇关于1115. Counting Nodes in a BST (30)[bst+dfs遍历]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

30常用 Maven 命令

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

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm

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

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

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

ural 1149. Sinus Dances dfs

1149. Sinus Dances Time limit: 1.0 second Memory limit: 64 MB Let  An = sin(1–sin(2+sin(3–sin(4+…sin( n))…) Let  Sn = (…( A 1+ n) A 2+ n–1) A 3+…+2) An+1 For given  N print  SN Input One

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

深度优先(DFS)和广度优先(BFS)——算法

深度优先 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT