问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据结构与算法分析 —— C 语言描述:二叉树

发布网友 发布时间:2022-11-01 03:03

我来回答

1个回答

热心网友 时间:2023-10-18 04:04

二叉树(binary tree)是一棵树,其中每个节点的儿子都不能多于两个。

二叉树的一个性质是平均二叉树的深度要比 N 小的多,这个性质有时很重要。分析表明,这个平均深度为 ,而对于特殊类型的二叉树,即二叉查找树(binary search tree)。其深度的平均值是 。不幸的是,在最坏情况下,这个深度可以大到 N-1 的。

因为一棵二叉树最多有两个儿子,所以我们可以用指针直接指向它们。树节点的声明在结构上类似于双链表的声明,在声明中,一个节点就是由 key(关键字)信息加上两个指向其他节点的指针(Left 和 Right)组成的结构。

应用于链表上的许多法则也可以应用到树上。特别地,当进行一次插入时,必须调用 malloc 创建一个节点。节点可以在调用 free 删除后释放。

我们可以用在画链表时常用的矩形框画出二叉树,但是,树一般画成圆圈并用一些直线连接起来,因为二叉树实际上就是图(graph)。当涉及树时,我们也不显示地画出 NULL 指针,因为具有 N 个节点的每一棵二叉树都将需要 N+1 个 NULL 指针。

二叉树有许多与搜索无关的重要应用。二叉树的主要用处之一是在编译器的设计领域。

上图就是一个表达式树(expression tree)。表达式树的树叶是操作树(operand),比如常数或者变量,而其他的节点为操作符(operator)。由于这里所有的操作都是二元的,因此这棵特定的树正好是二叉树,虽然这是最简单的情况,但是节点含有的儿子还是有可能多于两个的。一个节点也有可能只有一个儿子,如果有一目减算符(unary minus operator)的情形。可以将通过递归计算左子树和右子树所得到的值应用在根处的算符操作中而算出表达式树 T 的值。上面里的例子中,左子树的值是“((3+1)3)/((9-5)+2)”,右子树的值是“(3(7-4)+6)”,因此整棵树的表达式就是图上的结果。

我们可以通过递归产生一个带括号的左表达式,然后打印出在根处的运算符,最后再递归地产生一个带括号的右表达式而得到一个(对两个括号整体进行计算的)中缀表达式(infix expression)。这种一般的方法(左,节点,右)称为中序遍历(inorder traversal);由于其产生的表达式类型,这种遍历很容易记忆。

另一个遍历策略是递归打印出左子树、右子树,然后打印运算符。如果我们应用这种策略于上面的树,则输出将是“31+395-2+/743-6+-”。这种遍历策略一般称为后序遍历(postorder traversal)。

第三种遍历策略是先打印出运算法,然后递归地打印出右子树和左子树。同样的,应用这种策略于上面的树,则输出将是“-/++313-952+3-746”,这是一种不太常用前缀(prefix)记法,这种遍历策略为先序遍历(preorder traversal)。

这里我们只给出一种算法,来把后缀表达式转变成表达式树。这里的要点是,一次一个符号地读入表达式。如果符号是操作符,那么我们就建立一个单节点树并将一个指向它的指针推入栈中。如果符号是操作符,那么我们就从栈中弹出指向两棵树 和 的那两个指针( 的先弹出)并形成一棵新的树,该树的根就是操作符,它的左、右儿子分别指向 和 。然后将这棵新树的指针压入栈中。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 北大青鸟设计培训:大数据分析的常用方法有哪些? 古法金手镯刻有甲字的吗是真金吗 2021年4月15日到2022年10月27多少天了? ...宝宝的《居住登记凭证》,你们在4月30日前都办好了吗? 4月15日出生的人很可怕吗、太可怕了吗 2021年4月15到2022年8月7日一共多少天 4月15到8月7日多少天? 2022年4月15日到2022年9月10日多少天了 4月15日是什么节日 每年4月15日是什么节日 卧室放什么东西发财 卧室放啥东西发财 什么叫阳水 怎样判别水为阴水还是阳水? 买车有没有必要一键启动? 哈弗H9视听系统多媒体的语音指令清单都有什么? 怎样和小学老师打招呼? 气象预报 怎么才能养只QQ宠物? 在成都跑滴滴快车挣钱吗? 窗户安装注意事项 安装窗户不能马虎 夏天车用喷香机安全吗 抖音连蓝牙耳机为什么就卡听音乐没事 电脑卡听音乐都卡 右肺上叶磨玻璃结节1厘米会左胳膊疼吗? 拍了拍怎么加粗文字 UV打印机打印透明PVC为什么会出现这种雾状的东西,而且擦不掉? 2020年的3月25日到2022年的10月25日一共多少个月 2022年人力资源的报考条件是什么? 宣城市 儿童摄影店有几家 宣城儿童摄影店有几家 2022 年有哪些爱情剧值得观看? 黄色马丁靴可以用墨水涂黑吗? 水泥出口税率是多少,要最新的 江西美搭搭服饰供应链管理有限公司怎么样? 深圳市明大世纪供应链管理有限公司怎么样? 深圳市前海众发供应链服务有限公司怎么样? 1968年10月10日出生,女,姓李,起什么名字好呢? 股东出资不足应该怎么样处理 qq等级代挂是什么意思? 捐卵被骗可以报警吗 现在出国做试管婴儿合法吗?听说国内做的话会有很多*,真的吗?