2123 求二叉树的高和宽

描述

以二叉链表为存储结构,分别写出求二叉树高度及宽度的算法,所谓宽度是指二叉树的各层上,具有结点数最多的那一层上的结点总数。

输入

括号表示的二叉树,如:

A(B,C)

输出

二叉树的高度和宽度,用空格分隔,如:

2 2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{char data;struct node*lchild;struct node*rchild;
}tree;
char s[1001];
int cnt=0;
tree* creattree()
{char c=s[cnt];tree* link = (tree*)malloc(sizeof(tree));while(c!=')'){if(c>='A'&&c<='Z'){link->data=c;link->lchild=NULL;link->rchild=NULL;cnt++;c=s[cnt];}if(c=='(')//疑似有左孩子{cnt++;if(s[cnt]!=',')//左孩子不空,创建左子树link->lchild=creattree();c=s[cnt];if(c==',')//疑似有右孩子{cnt++;if(s[cnt]==')')//右孩子空的{cnt++;return link;}link->rchild=creattree();cnt++;if(cnt>=(int)strlen(s))break;c=s[cnt];}}if(c==',')//遇到右孩子前面的一个节点,先返回父节点{return link;}}return link;
}
int maxdepth=0;//最大层数
void depth(tree* head,int d)//深度,d表示当前层数
{if(d>maxdepth)maxdepth=d;if(head->lchild!=NULL){d++;depth(head->lchild,d);d--;}if(head->rchild!=NULL){d++;depth(head->rchild,d);d--;}
}
int wid[1001],maxwid=0;//wid[i]表示第i层拥有的节点个数
int curdepth=0;//当前在树中的层数
void width(tree* head)//宽度
{wid[curdepth]++;if(wid[curdepth]>maxwid)maxwid=wid[curdepth];if(head->lchild!=NULL){curdepth++;width(head->lchild);curdepth--;}if(head->rchild!=NULL){curdepth++;width(head->rchild);curdepth--;}
}
int main()
{scanf("%s",s);tree*head=creattree();depth(head,1);memset(wid,0,sizeof(wid));width(head);printf("%d %d",maxdepth,maxwid);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/12889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI学习指南数学工具篇-PCA基础知识

AI学习指南数学工具篇-PCA基础知识 1. PCA是什么&#xff1f; PCA&#xff0c;即主成分分析&#xff08;Principal Component Analysis&#xff09;&#xff0c;是一种常用的数据降维技术。它通过线性变换将原始数据投影到一个新的坐标系中&#xff0c;旨在找到数据中的“主成…

main.ts中import App from ‘./App.vue‘报错:找不到模块或者相应的类型证明

在src文件夹下创建一个shims-vue.d.ts并输入以下内容&#xff1a; declare module *.vue {import { ComponentOptions } from vueconst componentOptions: ComponentOptionsexport default componentOptions } 参考链接vue3 报错解决&#xff1a;找不到模块或其相应的类型声明…

Galxe已投资Pencils Protocol,投资者阵营正不断扩大

近日&#xff0c;Scroll 生态项目 Penpad 将品牌进一步升级为 Pencils Protocol&#xff0c;全新升级后其不仅对 LaunchPad 平台进行了功能上的升级&#xff0c;同时其也进一步引入了 Staking、Vault 以及 Shop 等玩法&#xff0c;这也让 Pencils Protocol 的叙事方向不再仅限于…

基础之音视频2

01 前言 02 mp 03 mp实例 简易音乐播放器 04 音频 sound-pool 1.作用 播放多个音频&#xff0c;短促音频 2.过程 加载load- 3.示例 模拟手机选铃声 步骤&#xff1a; 创建SoundPool对象&#xff0c;设置相关属性 音频流存入hashmap 播放音频 05 videoview 3gp 体积小 mp4 …

凸优化(Stephen Boyd) 2-4章答案(中文版)

https://www.123pan.com/s/erusjv-4xXed.html提取码:d4UD 由于是机翻&#xff0c;所以有些地方有错误。建议和原文对照阅读。原英文版答案网上很多。

让你情绪变好的七个小技巧

在快节奏的现代生活中&#xff0c;我们常常忙于奔波&#xff0c;忽略了生活中的小细节。然而&#xff0c;正是这些小小的行动&#xff0c;可以为我们的日常生活带来巨大的改变。以下是一些简单的生活步骤&#xff0c;它们能够帮助你提升生活质量&#xff0c;让你的生活焕发新的…

web安全学习笔记(15)

记一下第25-26课的内容。弱口令爆破的四种模式与判断成功失败的三种方案&#xff1b;爆破中的验证码拦截错误次数IP限制密码加密绕过 IP获取的原理以及绕过CDN获取客户真实IP 一、弱口令的分类 1.常规弱口令&#xff1a;如123456&#xff0c;666666&#xff0c;888888等 2.…

【软件测试】需求概念|软件的⽣命周期|开发模型|测试模型

目录 推荐 一、什么是需求 1.1 ⽤⼾需求 1.2 软件需求 二、开发模型 2.1 什么是“模型” 2.2 软件的⽣命周期 2.3 常⻅开发模型 2.3.1 瀑布模型 2.3.2 螺旋模型 2.3.3 增量模型、迭代模型 2.3.4 敏捷模型 2.4 测试模型 2.4.1 V模型 2.4.2 W模型(双V模型&#xff0…

Java_从入门到JavaEE_16

一、迭代器 1.Iterator 概念&#xff1a;Iterator是一个接口&#xff0c;它是集合的迭代器&#xff0c;集合可以通过Iterator去遍历集合中的元素&#xff0c;常用API接口&#xff1a; hasNext():如果迭代器中还有元素&#xff0c;则返回true。next():返回迭代器中的下一个元素…

使用RN的kitten框架的日历组件的修改

官方网页地址 下面就是我参考官方封装的时间日期组件&#xff08;主要是功能和使用方法&#xff0c;页面粗略做了下&#xff0c;不好看勿怪&#xff09; import React, {useState} from react; import {StyleSheet, View, TouchableOpacity, SafeAreaView} from react-native; …

FreeRTOS消息队列queue.c文件详解

消息队列的作用 消息队列主要用来传递消息&#xff0c;可以在任务与任务之间、中断与任务之间传递消息。 传递消息是通过复制的形式&#xff0c;发送方发送时需要不断复制&#xff0c;接收方接收时也需要不断复制。虽然会有内存资源的浪费&#xff0c;但是可以保证安全。 假…

Java项目:基于ssm框架实现的实验室耗材管理系统(B/S架构+源码+数据库+毕业论文+答辩PPT)

一、项目简介 本项目是一套基于ssm框架实现的实验室耗材管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 二、技术实现 jdk版本&#xff1a;1.8 …

2024年最新最全面的软件测试面试题(四)

1、在项目中如何保证软件质量? 项目质量不仅仅是某个人或某个团队来保障的&#xff0c;而是整个团队一起努力的结果&#xff0c;因此&#xff0c;在公司级别需要 有一个规范的项目流程。 产品&#xff0c;保证迭代过程中的产品逻辑&#xff0c;对于可能的兼容&#xff0c;升…

基于Springboot+Vue的Java项目-宠物商城网站系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

C++列表实现

文章目录 一、listView相关内容主要思想实例全部代码 二、QTreeView 一、listView 相关内容 QAbstractItemModel&#xff1a;一个抽象的类&#xff0c;为数据项模型提供抽象的接口&#xff0c;常见的的数据模型列如&#xff1a;QStringListModel,QStandardItemMode,QDirModel…

AI大模型探索之路-训练篇23:ChatGLM3微调实战-基于P-Tuning V2技术的实践指南

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

腾讯qq游戏客户端一面

自我介绍一下谈一谈你之前做的项目&#xff0c;在学校和之前在华为干了什么讲一下tcp/ip协议讲一下单线程和多线程那死锁该怎么解决单线程和多线程的安全性讲下https相关的东西&#xff0c;其中的安全性是如何实现的多线程之间的通信是如何实现的你最近在看什么书讲一讲单例模式…

PG 检查点管理与Oracle的比较

之前介绍过&#xff0c;在任何数据库中&#xff0c;一条DML操作执行都需要在内存中执行&#xff0c;但当操作越来越多&#xff0c;总有时候内存会写满&#xff0c;这时候就需要把内存中的块写入到磁盘&#xff0c;释放内存&#xff0c;保存数据。 写入到磁盘这一步&#xff0c;…

报错:(idea端口被占用)Web server failed to start. Port 9090 was already in use.

cmd里面输入&#xff1a; netstat -ano|findstr "9090" 可以看到pid是9644 然后再打开任务管理器

【前端每日一题】day6

一个函数将1~100按照提供的数组进行区间划分&#xff0c;如&#xff1a;[5&#xff0c;3&#xff0c;9]&#xff0c;划分 的结果是1 ~ 3&#xff0c;4 ~ 5&#xff0c;6 ~ 9&#xff0c;10 ~ 100 def partition_numbers(ranges):numbers list(range(1, 101)) # 生成1到100的…