二叉树的顺序存储结构的一个小问题

顺序存储是根据数组来完成的

/* 按层序次序输入二叉树中结点的值(字符型或整型), 构造顺序存储的二叉树T */
Status CreateBiTree(SqBiTree T)
{ 
    int i=0;
    printf("请按层序输入结点的值(整型),0表示空结点,输999结束。结点数≤%d:\n",MAX_TREE_SIZE);
    while(i<10)
    {
        T[i]=i+1;

        if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) /* 此结点(不空)无双亲且不是根 */
        {
            printf("出现无双亲的非根结点%d\n",T[i]);
            exit(ERROR);
        }
        i++;
    }
    while(i<MAX_TREE_SIZE)
    {
        T[i]=Nil; /* 将空赋值给T的后面的结点 */
        i++;
    }

    return OK;
}

里面这个if判断,明明是不可能出现这种错误的,我觉得有必要判断吗?
if(i!=0&&T[(i+1)/2-1]==Nil&&T[i]!=Nil) /* 此结点(不空)无双亲且不是根 */
{
printf("出现无双亲的非根结点%d\n",T[i]);
exit(ERROR);
}
有大佬可以解释一下吗??感激不尽...

0

1个回答

这段代码似乎在检查T是否符合二叉树数组
构造一个数组,很明显不符合二叉树
1
2 2
3 3 3 null
4 4 4 4 4 4 4 4
null那个元素为空,最后两个4很明显不符合条件

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
二叉树的顺序存储结构
// c6-1.h 二叉树的顺序存储结构(见图6.1) #define MAX_TREE_SIZE 100 // 二叉树的最大结点数 typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0号单元存储根结点 struct position { int level,order; // 结点的层,本层序号(按满二叉树计算) };在顺序存储结构中,如图62 所示
数据结构与算法简记:根据层次顺序存储结构构建二叉树
在存储满二叉树或近似满二叉树时,按节点层次顺序存储是个不错的主意,我们从根节点开始,逐层由左到右扫描各个节点,依次将节点数据存放到指定的数组中,如果偶尔遇到空的子节点,就用特殊符号来表示。 这个树结构已接近满二叉树了,如果使用按层次顺序存储,将会更简单,更节省空间。按照上面的方法,这棵树所对应的存储结构应该是: ['A', 'B', 'E', 'C', 'D', '#', 'F'] 其
二叉树的顺序存储结构的C++实现
本以为二叉树的顺序存储结构实现非常简单,类似于线性表,而在实际操作当中遇到了一些小问题,首先是如何判别树节点是否为空,我采用的方法初始化数组值为-111,新插入的节点覆盖初始值,而没有覆盖初始值的则认为是空节点。对于节点i,其左儿子节点为2*i,右儿子节点为2*i+1,掌握了这个规律,二叉树的前中后序遍历就不难实现了,本文只以前序遍历进行间接。Print函数是根据数组的顺序打印元素的,对于空节点选
二叉树之链式存储转换为顺序存储
在二叉树中,由于不同的需求,不同的人对数据的插入可能不同。在此由于刚开始学习树的插入,在不考虑树的排序的情况下,想对树进行插入操作,但是由于树的结构问题,找到其离root节点最近的空节点就成了难事。在参考《算法与数据结构》这本书中的树的全序遍历中,我找到了一些思路,可将二叉树的链式存储暂时转换为顺序存储,因此,能够很容易地找到离root节点最近的空节点,跟其父节点。参考代码如下:pTree Fin...
实验四 二叉树的实现(顺序存储结构)
一、实验目的1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;2、 掌握树的顺序结构的实现;3、 学会运用树的知识解决实际问题二、实验内容 自己确定一个二叉树(树结点类型、数目和结构自定)利用顺序结构方法存储。实现树的构造,并完成:1) 层序输出结点数据;2) 以合理的格式,输出各个结点和双亲、孩子结点信息;3) 输出所有的叶子结点信息;4)分析你的算法对于给定的二叉树的存储效率。...
二叉树采用顺序存储结构时的前序遍历
题目:一颗具有n个结点的二叉树采用顺序储存结构,编写算法对该二叉树进行前序遍历 C++实现如下: #include&amp;lt;iostream&amp;gt; using namespace std; class SeqTree { public: SeqTree(int n) { Creat(n); }//构造二叉树,采用顺序表储存数据 void Creat(int n); void PreOr...
二叉树的顺序存储和链式存储结构(java实现)
二叉树的顺序存储和链式存储结构(java实现)
C、C++二叉树简单构建和顺序存储
完全二叉树、满二叉树既可以用链式存储,也可以用数组来顺序存储。但是它们在在效率上却有着很大差别: 顺序存储: 优点:可以相对密集的存储树的结点,主要是通过k的计算公式。 缺点:可以存储一般二叉树但是存储效率不高,不能用于一般树。 构建树时必须先知道待构建树的高度。 链式存储: 优点:构建时不必先知道树的高度。 可表示一般二叉树。 include i...
二叉树顺序存储实现遍历
一、对于完全二叉树可以将其数据元素逐层存放到一组连续的存储单元中,用一维数组作为存储结构,对于编号为i的结点,其左孩子为2i,右孩子为2i+1. 二、实现代码及验证主函数 算法思想:遍历算法的核心任然是遍历,所想得到的结果是一个输出序列,将该输出序列置于一个数组中,再按该序列输出二叉树。二叉树按顺序存储与一维数组中,下标从1开始,算法的形参为下标的值, #include&amp;lt;stdio.h...
二叉树的顺序存储实现(Java)
二叉树的顺序存储结构是把二叉树的所有节点按照一定的次序顺序存储到一组包含n个存储单元的空间中。在二叉树的顺序存储结构中只存储节点的值,不存储节点之间的 逻辑关系,节点之间的逻辑关系由数组下标的顺序来体现。 二叉树的顺序存储原则是:不管给定的二叉树是不是完全二叉树,都看做完全二叉树。即按完全二叉树的层次次序把各个节点依次存入数组中。 如图所示二叉树存放在数组中就是{0,1,2,3,4,5,
二叉树的建立(顺序存储)
数据结构编程练习(六) 题目: 1)能够调用递归函数读取相应的数据建立二叉树,相应数据格式自行设计;  2)实现先序、中序、后序遍历二叉树 3)求取二叉树中的所有结点数 4)求取二叉树的深度 输入如图所示二叉树的方式为依次输入:1,2,3, 0,4,5, 6, -1 代码实现: #include "iostream" #include "cstring" using nam
C语言数据结构——二叉树的顺序存储结构
1、二叉树的顺序存储结构就是用一维数组存储二叉树的结点,结点的存储位置就是数组下标要能体现结点间的逻辑关系。 2、顺序存储结构一般只适用于完全二叉树。3、http://www.cnblogs.com/Alex-bg/archive/2012/08/12/2634203.html(代码原址)#include <stdio.h> #include <stdlib.h> #include <string
【数据结构】二叉树的顺序存储结构--遍历二叉树
树是n(n>=0)个结点的有限集。 在任一颗非空数中: 1)有且仅有一个根节点 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合也是一颗树,并且成为根的子树。   二叉树:n个结点的有限集合,该集合或者为空集(空),或者由一个根节点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。   二叉树及二叉树的遍历代码: #include "stdi
完全二叉树的三种遍历(二)--- 顺序存储
在上篇文章中已经贴了二叉树三种遍历的递归及非递归的实现代码,那这篇文章是干什么的呢?嗯,虽然不论是二叉树的顺序存储还是二叉树的链式存储,三种遍历的思路都是一样的,但是在写代码的时候仍然还要注意边界,所以决定也贴出来吧,好查找呗^O^来,继续上篇文章的树,二叉树的顺序存储就是在数组中存储。在代码上看起来就是一个数组,我们之所以说它是二叉树,意味着,在这篇文章中,逻辑意义上我们将它看成一颗树!!你会注...
关于二叉树的顺序存储和链式存储
【出处】http://book.51cto.com/art/200907/134251.htm 3.2.2  二叉树的顺序存储结构和链式存储结构 (1)二叉树的顺序存储结构 按照顺序存储结构的定义,用一组地址连续的存储单元以此自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。对于一般二叉树,则应将其
【数据结构】二叉树(顺序存储、链式存储)的JAVA代码实现
二叉树是一种非线性的数据结构。它是由n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两颗不相交的、被分别称为左子树、右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也可以称做一个结点。 二叉树是有序的,即若将其左右两个子树颠倒,就成为另一棵不同的二叉树。这也就意味着,即使某棵二叉树的树中结点只有一棵子树,也同样要区分是左子树还是右子树。   ...
链接存储转为顺序存储(二叉树)
1、题目:  Problem Description 问题描述:设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,建立该二叉链表,要求将该二叉树的二叉链表存储结构转换为顺序存储结构,并输出各数组元素,空二叉树用'#'表示。  Input 第一行为一个整数n,表示以下有n组数据,每组数据占一
二叉树的顺序存储及其Java实现
顺序存储充分利用满二叉树的特性,即每层的节点数分别为1、2、4、8。。。2i+1,一个深度为i的二叉树最多只能包含2i-1个节点,因此只要定义一个长度为2i-1的数组即可存储这颗二叉树。   对于普通的不是满二叉树的,那些空出来的节点对应的数组元素留空即可,因此顺序存储会造成一定的空间浪费。如下图。 显然,如果是完全二叉树,那么就不会有空间浪费的情况;若是只有右子树,那么会造成相当大
由顺序方式存储的完全二叉树进行重建
标题: 由顺序方式存储的完全二叉树进行重建 时 限: 1000 ms 内存限制: 3000 K 总时限: 3000 ms 描述: 按顺序方式存储的一棵完全二叉树的结点记录,结点个数为n。根据所输入的顺序结构的结点记录建立二叉树,输出树的先序,中序和后序遍历结果。 注:数字“0”表示不存在此结点,没有孩子结点 输入: 树结点个数n
如何将树的 "二叉链表存储形" 式转化为 "顺序存储形式" 以及树的 “顺序存储形式” 转化为 “二叉链表存储形式”
  //首先将树的二叉链表存储形式转化为树的顺序存储形式 //首先知道树的顺序存储结构  它是利用完全二叉树的性质来定义的  不管一棵二叉树什么结构 它都可以补全成完全二叉树 //其实我们把二叉树的顺序表从1开始 (有些也可以从0开始 此时它的左右孩子就变成了 2*i+1 / 2*i+2) //它的左右孩子为2*i   2*i+1   可以直接通过树的遍历算法来实现  用树的结点来做索引...
使用java实现顺序存储的二叉树
Java实现顺序存储的二叉树
二叉树的顺序存储实现及遍历
关于二叉树的实现,常见的大概有三种实现方法: 顺序存储:采用数组来记录二叉树的所有节点 二叉链表存储: 每个节点保留一个left,right域,指向左右孩子 三叉链表存储: 每个节点保留一个left, right, parent域,指向左右孩子和父亲 本文将实现顺序存储来实现一个二叉树并介绍其遍历方法
将二叉树从顺序存储转变为链式存储
原文链接:https://www.cnblogs.com/zlspace/p/6831293.html 问题描述:设有n个节点的二叉树采用顺序存储结构存储在数组BT中,编写函数由该数组创建的二叉链式存储结构 思路:假定BT数组中顺序存储顺序为层次遍历的顺序 BT数组中的下标 与 二叉树节点按层次遍历编号 如图 即得到节点的值等于BT[K-1],k为节点编号,以及如下图根节点与左右...
顺序存储二叉树
顺序存储二叉树的概念说明  二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。 因此,必须把二叉树的所有结点安排成为一个恰当的序列,反映出节点中的逻辑关系 用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号,缺点是有可能对存储空间造成极大的费 在最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点存储空间。 依据二叉树的性质,
C语言数据结构二叉树的顺序存储基本操作
#include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;string.h&amp;gt; #define MAX_TREE_SIZE 100 // 二叉树的最大结点数 typedef char TElemType; typedef TElemType SqBiTree[MAX_TREE_SIZE]; // 0号单元存储根结点 TEle...
看数据结构写代码(22) 二叉树的顺序存储方式
二叉树 是 一个 节点 的度最多是2 ,并且区分 左右子树的 特殊树。 二叉树 有一些特性,这些特性 是 写 二叉树顺序表的 重要依据,所以先介绍一下: 1.k层的二叉树,最多有  2 的 k次方 -1 个节点,如果 节点数达到最大值,称为 满二叉树。 2.第k层的二叉树,最多 有 2的 k-1 次方 个节点 3.度为0的节点叫做叶子节点 n0,度为2的节点 n2,    no
数据结构学习笔记(三) 树形结构之一般二叉树的顺序存储_二叉链表表示法_转换
以下是一般二叉树的顺序存储表示法到二叉链表表示法的转换,最后用前序遍历的方式输出的代码。//一般二叉树的顺序存储表示法到二叉链表表示法的转换 #include<iostream> using namespace std;//抽象数据类型——变量定义和变量说明 const char MaxSize=10; typedef int datatype; typedef struct node {
二叉树的顺序存储和链式存储
作为一个机械屌丝男,最近一直在恶补
二叉树的顺序存储和基本操作
一、二叉树的定义: 二叉树是n个结点的有限集合,当n=0时称为空树,否则:(1)有且只有一个特殊的被称为树的根结点;(2)若n>1时,其余的结点被分为两个互不相交的子集,称为左右子树,并且左右子树都是二叉树;可以看出二叉树的定义是递归的。 二、二叉树的性质: (1)在非空二叉树上,第i层至多有2^(i-1)个结点; (2)深度为k的二叉树至多有2^k-1个结点; (3)对任何一个二叉树,
数据结构--二叉树(定义与存储结构)
什么是二叉树
给出一个字符串形式表达的二叉树,求出指定节点深度
给出一个字符串形式表达的二叉树,求出指定节点深度。 输入的树形结构字符串格式为: 1、以父节点、左子树、右子树表示的二叉树;每个父节点不会超过两个子节点; 2、树的每一个节点采用单个字母表示;树的层次采用数字表示,树根的层次为1,下一层为2,不会超过9层; 3、字符串以“节点名称 层次数 节点名称 层次数…”的形式出现,同一个父节点下,先出现的为左子树。 例如字符串“a1b2c2d3e3
二叉树基本概念——二叉树(概念、性质、顺序存储,链式存储)、满二叉树与完全二叉树、二叉链表,三叉链表,双亲链表
一、二叉树定义 二叉树的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒 下面是含三个结点的二叉树(方便理解)二、二叉树性质1、在二叉树的第i层上至多有2^(i-1)个结点(i>=1):比如第1层只有一个结点(根)2、深度为k的二叉树至多有2^(k)-1个结点(k>=1)3、对任何一个二叉树T,如果其终端结点数为n0,度为2的结点数
二叉树的存储表示与实现
二叉树的顺序存储 完全二叉树的存储可以按照从上到下,从左到右的顺序依次存储在一维数组中。完全二叉树的顺序存储如图所示:                 如果按照从上到下,从左到右的顺序把非完全二叉树也同样的编号,将结点依次存放在一维数组中,为了能够正确反映二叉树中结点之间的逻辑关系,需要在一维数组中将二叉树中不存在的结点位置空出。   顺序存储对于完全二叉树来说是
顺序存储的二叉树的最近的公共祖先问题
5-10 顺序存储的二叉树的最近的公共祖先问题   (25分) 设顺序存储的二叉树中有编号为ii和jj的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。 输入格式: 输入第1行给出正整数nn(\le 1000≤1000),即顺序存储的最大容量;第2行给出nn个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一
字符串日期转换为指定格式的日期StringParseDate
/**   * 字符串日期转换为指定格式的日期   * @param str   * @return   * @throws ParseException   *   * @author zhaozj   */    public static Date StringParseDate(String str,String format) throws ParseException
二叉树顺序存储结构的一个问题
硬是没看懂下面这句话: rn “一般的二叉树采用顺序存储结构时,虽然简单,但易造成存储空间的浪费。rn  [b] 【例】最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点的存储空间。[/b]”rnrn按照下面的这个树rn Arn Brn Crnk == 3,rn按照公式应该是需要5个空间 2*3 - 1 == 5 rnrn但实际上构造完全二叉树后一共是需要7个节点(其中有4个是多加的)存储空间啊!!!!rnrn2k-1这个公式怎么来的??rn
二叉树顺序存储结构的基本操作
http://blog.csdn.net/ssw_1990/article/details/40511665代码。
线性表顺序存储结构的实现
线性表是一个有序序列,若元素存在多个,则第一个元素没有前驱,最后一个没有后继,其他元素都有且只有一个前驱和后继。线性表是有限的,线性表元素个数n(n&amp;gt;=0)定义为线性表长度,当n==0时,称为空表。 线性表有两种物理结构,第一种为顺序存储结构,另一种为链式存储结构。这一章先来利用C++实现顺序存储结构。 头文件声明lineartable.h #pragma once /* 线性...
数据结构题 怎么做
5、某二叉树的结点数据采用顺序存储结构如下(5分) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 E A F D H C G I B 求:(1)画出该二叉树。 (2)写出结点值为D的双亲结点及左右子树。 (3)将该二叉树还原为森林。 6、试分别画出下图所示各二叉树对应的森林,并
数据结构——二叉树的存储结构
之前已经谈过了树的存储结构,并且说到顺序存储对树这一种一对多的关系的结构实现起来比较困难。但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现。 二叉树的顺序存储结构 二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标,要能体现结点之间的逻辑关系,如双亲与孩子的关系,左右兄弟的关系等。 先来看完全二叉树的顺序存储,一棵完全二叉树如图所...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java 学习二叉树 java二叉树的学习

相似问题

1
二叉树的顺序存储结构的一个小问题
0
数字匹配判断是否能够开锁的一个问题,加锁算法,利用C语言解决的办法
0
有关多项式方程的极值的计算的一个问题利用C语言的解答的方式是什么思路
2
我要截取一段字符串,以固定的一个字符截取,应该这么做?
1
挑战,制作一个文件夹图标为gif动画的资源管理器
0
线性表的聚合操作的问题的一个实现的算法,采用C语言的办法如何解决
1
javascrpt语言里读取一个字符串,然后再分割成单个的字符,放在不同的表单
0
一个字符串基于base64方式实现的编码算法,用二进制的表达,采用C语言实现
1
javascrpt语言整合iframe到一个div的操作,求助
0
集合的匹配的一个算法问题的解释?如何利用C语言实现的
0
最大二进制公共子序列的一个算法的问题如何利用C语言的办法去实现怎么做?
0
一个立体的分割蛋糕的算法问题,请问如何利用C语言的形式解决
0
一个有关最长数字子序列方面的算法的问题?用C语言如何解决的
3
运用C语言的编程的技术,编写一个程序,判断给定的两个数是否是亲和数
1
求一个C语言基于SDL2开发的俄罗斯方块游戏!!!!! 需要源码
0
访问相关路径寻找长度的一个算法,怎么利用C语言实现的呢?
2
二级c语言考试选择题小问题
0
一个颜色混合比例的计算的问题,如何利用C语言是真么编程实现的
0
数列级数的极值的计算的一个问题,请问是如何利用C语言的编程代码实现的呢
0
关于二叉树的剪纸的一个算法的问题,请教了大家,怎么才能利用C语言的办法?