//BTree_Ergodic:main.cpp 二叉树遍历算法练习
//time: 2014.12.01 19:10
//author: chaolee
/*********************************************************************************/
//头文件包含处
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*********************************************************************************/
//自定义数据类型声明处
//定义节点最大个数
#define MaxNode 20
//节点数据类型
typedef char ElemType;
//二叉树节点类型
typedef struct btnode{
ElemType data;
btnode * lchild;
btnode * rchild;
}BtNode;
//二叉树栈
typedef struct{
BtNode * stack[MaxNode]; //栈区
int top; //栈顶指针
}BTreeStack;
/*********************************************************************************/
//自定义函数声明处
//从括号表述法创建二叉树(使用栈进行实现)
bool CreateBTreefromBracketNotation(BtNode * &r,char * btStr){
BTreeStack bts;
bts.top=-1; //初始化栈
int i=0,k=0; //i用于保存串的偏移量,k用于标记处理栈顶的左指针还是右指针
char ch; //ch用于保存括号表示法串的字符
BtNode * temp=NULL; //temp用于保存待处理的节点
while((ch=*(btStr+i))!='\0') //循环扫描串,并将字符存到ch
{
switch(ch){
case '(': //将子树根节点进栈,准备处理根节点左指针
bts.stack[++bts.top]=temp;
k=1;
break;
case ')': //子树根节点出栈
bts.top--;
break;
case ',': //准备处理子树根节点右指针
k=2;
break;
default: //处理数据节点
temp=(BtNode *)malloc(sizeof(BtNode));
temp->data=ch;
temp->lchild=temp->rchild=NULL;
switch(k){
case 0:
r=temp;
break;
case 1:
bts.stack[bts.top]->lchild=temp;
break;
case 2:
bts.stack[bts.top]->rchild=temp;
break;
}
break;
}
i++;
}
return true;
}
//根据括号表示法计算子树的长度
int FindLenofSon(char * s,int Len){
char ch; //ch用于保存单位串
int i=0,match=0; //i用于记录偏移长度,match用于保存状态
if(*(s+1)==')'||*(s+1)==',')
return 1;
for(i=1;i<Len;i++){
ch=*(s+i);
if(ch=='(')
match++;
else if(ch==')'){
match--;
if(match==0)
break;
}
}
return i+1;
}
//从括号表述法创建二叉树(递归实现)
void CreateBTreefromBracketNotation2(BtNode * &r,char * btStr, int len){
if(len<=0)
return;
r=(BtNode *)malloc(sizeof(BtNode));
r->data=*btStr;
int offset1=FindLenofSon(btStr+2,len-2);
CreateBTreefromBracketNotation2(r->lchild,btStr+2,offset1);
if(len-3-offset1<=0)
return;
else{
int offset2=FindLenofSon(btStr+offset1,len-2-offset1);
CreateBTreefromBracketNotation2(r->rchild,btStr+2+offset1,offset2);
}
}
/*********************************************************************************/
//主函数
int main()
{
char * BracketNotationStr="a(b(d,e))";
BtNode * root=NULL,* root2=NULL;
CreateBTreefromBracketNotation(root,BracketNotationStr);
CreateBTreefromBracketNotation2(root2,BracketNotationStr,strlen(BracketNotationStr));
system("PAUSE");
return 0;
}
/************************************/
//说明:
//在本例中括号表示法如果右子树不存在则不需要打逗号
/************************************/相关推荐
树状数组(Fenwick Tree / Binary Indexed Tree, BIT)
优点效率高:更新和查询都是 O(log N)。代码简短:易于实现,不易出错。空间开销小:只需要一个和原数组等大的辅助数组。局限只能处理满足结合律且有逆元的操作(如加减法、异或)。求区间最大/最小值这种操作无法直接用标准树状数组解决(需要特殊改造)。功能相对线段树较少,例如复杂的区间更新操作难以实现。常见应用单点修改,区间求和:最经典的应用。区间修改,单点查询:通过维护一个差分数组,将区间修改转化为两次单点修改,单点查询转化为一次前缀和查询。求逆序对。
Paths in a Complete Binary Tree codeforces
D. Paths in a Complete Binary Tree time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output T is a complete binary t
full binary tree != 满二叉树
国内教材对满二叉树的定义: 一棵深度为k且有2^k-1个结点的二叉树称为满二叉树. ————严蔚敏《数据结构(C语言版)》124页 即达到饱和的二叉树。也可以这么定义: 同时满足下面两个条件的二叉树称为满二叉树: (1)每个结点要么有两个子结点,要么没有子结点; (2)叶子结点只能出现在最后一层。 下图是一棵符合国内教材定义的满二叉树: 国际上对ful
NVIDIA NCCL 源码学习(十二)- double binary tree
上节我们以ring allreduce为例看到了集合通信的过程,但是随着训练任务中使用的gpu个数的扩展,ring allreduce的延迟会线性增长,为了解决这个问题,NCCL引入了tree算法,即double binary tree。
HTML入门(详细教程),前端入门从这里开始
HTML基础教程,网页框架搭建,表单制作,了解HTML标签的基本用法,每个标签具备哪些属性。
【深度解析】AURIX TC387 UCB Flash架构与避坑指南(第一篇)
摘要:UCB(用户配置块)是AURIX TC3xx芯片启动与安全的关键配置区域,位于DFLASH0存储区。每个512字节的UCB包含启动模式、安全设置等关键参数,并通过强制CRC32校验确保完整性。UCB分为启动头(UCB_BMHD)、安全配置(UCB_ORIG)及其备份(UCB_COPY)三种主要类型。不同于常规Flash,UCB具有自动擦除特性,错误配置可能导致芯片永久锁死。开发中应谨慎修改UCB,必须同时编程原始和备份版本,并确保正确的CRC校验。后续文章将详细介绍UCB编程方法和调试技巧。
Segment Tree and Binary index tree
Segment Tree: http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/ http://www.geeksforgeeks.org/segment-tree-set-1-range-minimum-query/ Binary Indexed Tree: http://www.geeks
保姆级教程:在瑞芯微RV1126B上部署轻量化YOLOv8,实现端侧实时目标检测
本文详细介绍了在瑞芯微RV1126B芯片上部署轻量化YOLOv8模型的完整流程,包括开发环境搭建、模型训练优化、量化转换及嵌入式部署。通过利用RV1126B的3TOPS NPU算力和AI-ISP特性,实现端侧实时目标检测,提升边缘AI应用的性能和效率。
Binary indexed tree
Suitable for interval sum or prefix sum. Interval sum is just difference of two prefix sums. Compared with Segment Tree, Binary Indexed Tree requires less space and is easier to implement. BIT needs exactly n extra spaces, but Segment Tree needs approximat
电脑卸载神器Revo Uninstaller Pro,彻底清残留,终身无限制使用
打开软件后,它会自动扫描并列出电脑里所有已安装的程序,小到各种插件、大到专业设计软件和驱动程序,哪怕是隐藏的系统组件,都能给你扒出来,还会自动分类整理,加上搜索功能能快速定位目标软件,就算是电脑小白,也能轻松上手。卸载彻底无残留:能直接代替系统自带的 “添加 / 删除程序”,不光能正常卸载软件,还会通过内置卸载程序配合残留扫描,把软件留下的残留文件、垃圾还有注册表项都扫得明明白白,扫描强度有三档可以选,想清理得多干净都能自己定,删除之后电脑立马清爽不少。电脑用久了是不是越来越慢?
Hierarchical-Localization 环境配置与依赖管理全攻略
本文提供了Hierarchical-Localization(hloc)视觉定位工具箱从零开始的环境配置与依赖管理全攻略。针对Windows、Ubuntu和macOS三大操作系统,详细解析了Python版本选择、PyTorch与CUDA版本匹配、pycolmap版本锁定等核心依赖的安装步骤,并汇总了权重文件格式、NumPy版本、路径配置等常见问题的排查与解决方案,旨在帮助用户高效搭建稳定的hloc开发环境。
[LOJ6669]Nauuo and Binary Tree
但无论如何,卡长剖都太离谱了。
智能座舱测试工程师必看:从零搭建自动化测试框架的5个实战技巧
本文为智能座舱测试工程师提供从零搭建自动化测试框架的5个实战技巧,涵盖环境搭建、ADB高级应用、Python脚本工程化、Monkey测试优化及性能调优。通过ADB深度操作和Python脚本封装,帮助测试人员构建高可复用的智能座舱测试解决方案,显著提升测试效率与问题发现率。
深入剖析 Double Binary Tree 与主流 Reduce 算法的时间效率对比
本文深入对比了分布式训练中主流Reduce算法的时间效率,重点剖析了Double Binary Tree算法的设计原理与性能优势。通过分析Ring Reduce、2D-Torus Reduce、Butterfly Reduce等算法的通信步数与带宽利用率,并结合不同集群规模与数据大小的实战场景,为算法选择提供了数据驱动的决策依据,旨在帮助开发者优化分布式训练中的通信瓶颈。
STM32F103单片机驱动TM1637数码管显示模块
最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...
binary indexed tree
binary indexed tree背景二进制索引树(binary indexed tree [bit])是一种高效计算累积频率的“假想数据结构“,不是通所说的二叉搜索树(binary search tree)。 对一维数组A求累积频率, 常规做法如下。 更新(x, v) := A[x] += v; //O(1) 查询(x) := A[0] + A[1] + … + A[x]; //O(N)
廖雪峰Python教程[完整版]
廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白
【算法总结】Binary Tree & Binary Search Tree 二叉树
描述: 树的问题主要集中在特定条件下遍历travelsal (pre-order 中->左->右 ; inorder 左->中->右; post-order 左->右->中), 二分查找树 binary search tree。Binary Search Tree: 为root左边为小于它的值,右边为大于它的node. 例题: 二叉树的查找及遍历: Path Sum Sym
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Segment Tree / Binary Indexed Tree
参见 307. Range Sum Query - Mutable Segment Tree Tree Implementation (SegmentTreeNode) https://www.youtube.com/watch?v=rYBtViWXYeI&list=PLLuMmzMTgVK7ug02DDoQsf50OtwVDL1xd&index=1https://leetc...
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
各种Binary Tree定义
参考 wikipedia 各类二叉树的定义 每个节点 children = 0 / 2,为 full binary tree 简单讲就是没有奇葩的单节点“拐弯”。 按 level order 从左到右依次(尽量)填满,为 complete binary tree.
Binary Indexed Tree Template
//memset c 0 before use int c[MAXN]; //n -> update place //v -> update value void update(int n,int v) { for(;n<=MAXN;n+=(n&-n)) c[n]+=v; } //get the sum from 1 to n (BIT starts from 1) int read(i
详解 Double Binary Tree、Ring Reduce、2D-Torus Reduce、Butterfly Reduce 时间消耗
简单讲解 Double Binary Tree。本文还汇总了各种Reduce方法,包括Butter Fly Reduce Ring Reduce。本文主要分析了他们的时间消耗情况。
257. Binary Tree Paths*
257. Binary Tree Paths* https://leetcode.com/problems/binary-tree-paths/ 题目描述 Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. Example: Input: 1 / \ ...
Binary Index Tree And Segment Tree for PKU #3378 Crazy Thairs
Crazy ThairsTime Limit: 3000MSMemory Limit: 65536KTotal Submissions: 3111Accepted: 699DescriptionThese days, Sempr is crazed on one problem named Crazy Thair. G
Binary Indexed Tree
http://www.cs.ubc.ca/local/reading/proceedings/spe91-95/spe/vol24/issue3/spe884.pdf&refer=binaryIndexedTrees http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=binaryIndexedTrees h
树状数组(Binary Indexed Tree)
树状数组,数组a是原数组,下面是他们的一些关系数组C就是C1=a1C2=a1+a2C3=a3C4=a1+a2+a3+a4C5=a5……C8=a1+a2+a3+a4+a5+a6+a7+a8……C2^n=a1+a2+….+a2^n那么树状数组具体怎么定义的呢?思考上面的规律,不难得出结论:对于序列a,我们设一个数组C定义C[i] = a[i – 2^k + 1] + … + a[i],
1156



被折叠的 条评论
为什么被折叠?



