binary tree

树状数组(Binary Indexed Tree),看这一篇就够了 定义 根据维基百科的定义: A Fenwick tree or binary indexed tree is a data structure that can efficiently update elements and calculate prefix sums in a table of numbers. 也就是说,所谓树状数组,或称Binary Indexed Tree,... 阅读详情
//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;
}


/************************************/
//说明:
//在本例中括号表示法如果右子树不存在则不需要打逗号
/************************************/

【面试常见算法整理】Binary Indexed Tree(Fenwick Tree,树状数组)详解 Binary Indexed Tree(Fenwick Tree,树状数组)详解 问题:求一个数组中连续n项的和。首先想到的肯定是做一个循环,把这个连续的n项加起来,时间复杂度为O(n)。复杂度为n,看起来还不错,再说了求n个数的和,怎么也要加n次吧,所以说这应该就是最优解了,但是一提交结果是Time Limit Exceeded,顿时傻眼了,难道还有复杂度更低的方法?会不会有O(logn)的解法? 阅读详情

相关推荐

树状数组(Fenwick Tree / Binary Indexed Tree, BIT)

优点效率高:更新和查询都是 O(log N)。代码简短:易于实现,不易出错。空间开销小:只需要一个和原数组等大的辅助数组。局限只能处理满足结合律且有逆元的操作(如加减法、异或)。求区间最大/最小值这种操作无法直接用标准树状数组解决(需要特殊改造)。功能相对线段树较少,例如复杂的区间更新操作难以实现。常见应用单点修改,区间求和:最经典的应用。区间修改,单点查询:通过维护一个差分数组,将区间修改转化为两次单点修改,单点查询转化为一次前缀和查询。求逆序对。

ltrbless的博客 1156

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

Courage_kn的博客 881

full binary tree != 满二叉树

国内教材对满二叉树的定义: 一棵深度为k且有2^k-1个结点的二叉树称为满二叉树. ————严蔚敏《数据结构(C语言版)》124页 即达到饱和的二叉树。也可以这么定义: 同时满足下面两个条件的二叉树称为满二叉树: (1)每个结点要么有两个子结点,要么没有子结点; (2)叶子结点只能出现在最后一层。 下图是一棵符合国内教材定义的满二叉树: 国际上对ful

threadRunner的专栏 1886

NVIDIA NCCL 源码学习(十二)- double binary tree

上节我们以ring allreduce为例看到了集合通信的过程,但是随着训练任务中使用的gpu个数的扩展,ring allreduce的延迟会线性增长,为了解决这个问题,NCCL引入了tree算法,即double binary tree。

KIDGIN7439的专栏 1万+

HTML入门(详细教程),前端入门从这里开始

HTML基础教程,网页框架搭建,表单制作,了解HTML标签的基本用法,每个标签具备哪些属性。

wandertp的博客 1285

【深度解析】AURIX TC387 UCB Flash架构与避坑指南(第一篇)

摘要:UCB(用户配置块)是AURIX TC3xx芯片启动与安全的关键配置区域,位于DFLASH0存储区。每个512字节的UCB包含启动模式、安全设置等关键参数,并通过强制CRC32校验确保完整性。UCB分为启动头(UCB_BMHD)、安全配置(UCB_ORIG)及其备份(UCB_COPY)三种主要类型。不同于常规Flash,UCB具有自动擦除特性,错误配置可能导致芯片永久锁死。开发中应谨慎修改UCB,必须同时编程原始和备份版本,并确保正确的CRC校验。后续文章将详细介绍UCB编程方法和调试技巧。

2511_94612429的博客 1236

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

1272

保姆级教程:在瑞芯微RV1126B上部署轻量化YOLOv8,实现端侧实时目标检测

本文详细介绍了在瑞芯微RV1126B芯片上部署轻量化YOLOv8模型的完整流程,包括开发环境搭建、模型训练优化、量化转换及嵌入式部署。通过利用RV1126B的3TOPS NPU算力和AI-ISP特性,实现端侧实时目标检测,提升边缘AI应用的性能和效率。

weixin_30329623的博客 269

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

UniversityGrass的博客 223

电脑卸载神器Revo Uninstaller Pro,彻底清残留,终身无限制使用

打开软件后,它会自动扫描并列出电脑里所有已安装的程序,小到各种插件、大到专业设计软件和驱动程序,哪怕是隐藏的系统组件,都能给你扒出来,还会自动分类整理,加上搜索功能能快速定位目标软件,就算是电脑小白,也能轻松上手。卸载彻底无残留:能直接代替系统自带的 “添加 / 删除程序”,不光能正常卸载软件,还会通过内置卸载程序配合残留扫描,把软件留下的残留文件、垃圾还有注册表项都扫得明明白白,扫描强度有三档可以选,想清理得多干净都能自己定,删除之后电脑立马清爽不少。电脑用久了是不是越来越慢?

qq_75153390的博客 1751

Hierarchical-Localization 环境配置与依赖管理全攻略

本文提供了Hierarchical-Localization(hloc)视觉定位工具箱从零开始的环境配置与依赖管理全攻略。针对Windows、Ubuntu和macOS三大操作系统,详细解析了Python版本选择、PyTorch与CUDA版本匹配、pycolmap版本锁定等核心依赖的安装步骤,并汇总了权重文件格式、NumPy版本、路径配置等常见问题的排查与解决方案,旨在帮助用户高效搭建稳定的hloc开发环境。

weixin_29066781的博客 335

[LOJ6669]Nauuo and Binary Tree

但无论如何,卡长剖都太离谱了。

StaroForgin的博客 444

智能座舱测试工程师必看:从零搭建自动化测试框架的5个实战技巧

本文为智能座舱测试工程师提供从零搭建自动化测试框架的5个实战技巧,涵盖环境搭建、ADB高级应用、Python脚本工程化、Monkey测试优化及性能调优。通过ADB深度操作和Python脚本封装,帮助测试人员构建高可复用的智能座舱测试解决方案,显著提升测试效率与问题发现率。

python9snake的博客 635

深入剖析 Double Binary Tree 与主流 Reduce 算法的时间效率对比

本文深入对比了分布式训练中主流Reduce算法的时间效率,重点剖析了Double Binary Tree算法的设计原理与性能优势。通过分析Ring Reduce、2D-Torus Reduce、Butterfly Reduce等算法的通信步数与带宽利用率,并结合不同集群规模与数据大小的实战场景,为算法选择提供了数据驱动的决策依据,旨在帮助开发者优化分布式训练中的通信瓶颈。

weixin_29231725的博客 539

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

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)

deyangliu的专栏 560

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【算法总结】Binary Tree & Binary Search Tree 二叉树

描述: 树的问题主要集中在特定条件下遍历travelsal (pre-order 中->左->右 ; inorder 左->中->右;  post-order 左->右->中), 二分查找树 binary search tree。Binary Search Tree: 为root左边为小于它的值,右边为大于它的node. 例题: 二叉树的查找及遍历: Path Sum Sym

u012296380的专栏 926

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...

weixin_30607659的博客 186

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

各种Binary Tree定义

参考 wikipedia 各类二叉树的定义 每个节点 children = 0 / 2,为 full binary tree 简单讲就是没有奇葩的单节点“拐弯”。 按 level order 从左到右依次(尽量)填满,为 complete binary tree.

michaelbinwang的博客 658

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

Uni ACM 891

详解 Double Binary Tree、Ring Reduce、2D-Torus Reduce、Butterfly Reduce 时间消耗

简单讲解 Double Binary Tree。本文还汇总了各种Reduce方法,包括Butter Fly Reduce Ring Reduce。本文主要分析了他们的时间消耗情况。

随缘写东西,随缘分享 5563

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 / \ ...

珍妮的选择的博客 273

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

斯巴达的勇士已经是雅典的臣民了。。。 1658

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

candj的专栏 537

树状数组(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],

Terro的OI Blog 1064
上一篇: 二叉树
下一篇: Binary Tree FamilyMap
Codelee1995
博客等级 码龄12年 3粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值