以二叉链表作为二叉树的储存结构,在具有n个结点的二叉链表中n(n>0),空链域的个数为()

作者&投稿:东野宁 (若有异议请与网页底部的电邮联系)
一棵n个结点的完全二叉树以向量(数组)作为存储结构,试设计非递归算法对该完全二叉树进行前序遍历~

#include
#define ARRAY_MAX 12
int main()
{
int tree[ARRAY_MAX];
for(int i = 0;i < ARRAY_MAX;i++)
tree[i] = i+1;
int flag = 0;//记录当前叶子的遍历位置,0 刚遍历到这个叶子,1 已经遍历完成该叶子的左儿子,2 已经遍历完成该叶子的右儿子
int count = 1;//假设tree不为空
while(!(count == 1&&flag == 2))
{
if(flag == 0)
{
printf("%d ",tree[count-1]);
if(count*2 > ARRAY_MAX)
flag = 1;
else
count = count*2;
}
else if(flag == 1)
{
if(count*2+1 > ARRAY_MAX)
flag = 2;
else
{
count = count*2+1;
flag = 0;
}
}
else if(flag == 2)
{
if(count%2 == 0)
flag = 1;
else
flag = 2;
count = count/2;
}
}
getchar();
return 0;
}
以上代码Microsoft Visual C++ 6.0中编译通过,输出的数列为以下下二叉树的前序遍历
连5分都不给,真小气......

用三叉链表作二叉数的存储结构,当二叉树有n个结点时,有多少个空指针
【答】当用二叉链表存储二叉树时有,n+1个空的指针,如用三叉链表存储二叉树时,第三个指针用来指向双亲,只有根无双亲,所以又多出一个空的指针,则总的空指针为n+2

以二叉链表作为二叉树的储存结构,在具有n个结点的二叉链表中n(n>0),空链域的个数为n+1。

二叉链表结构描述:

typedef struct CSNode{

ElemType data;

struct CSNode *firstchild , *netsibling;

} CSNode,* CSTree;

由于二叉树的存储结构比较简单,处理起来也比较方便,所以有时需要把复杂的树,转换为简单的二叉树后再作处理。

扩展资料:

二叉树类型:

1、完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。

2、满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。

3、平衡二叉树——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。



n个结点的二叉树二叉链表中有n+1个空链域,三叉链表中有n个(多了一个根结点中的空链域)

二叉树的度表示节点的子树或直接继承者的数目,二叉树的度是一个子树或单子树。2度是两个孩子,或者左和右子树有两个叉树,最大度数为2。


扩展资料:


一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点数。而在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。


具有n个节点的完全二叉树的深度为floor(log2n)+1。深度为k的完全二叉树,至少有2k-1个节点,至多有2k-1个节点。



n个结点的二叉树二叉链表中有n+1个空链域,三叉链表中有n个(多了一个根结点中的空链域)

已知一棵二叉树以二叉链表为存储结构,编写如下程序:对于树中每一个元 ...
答:先前序遍历整个二叉树,找到符合要求的结点,然后后序遍历该结点的整个子树,逐一释放结点。//假设二叉树结构体如下struct binTree{ int data; binTree *lchild; binTree *rchild;}*BiTree;//函数如下BiTree find(BiTree node, int x){ if(node) { if(node->data==x) dele...

用C++程序语言:以二叉链表作存储结构,编写一个算法将二叉树左、右子树...
答:t->data=bt->data; //申请一个新节点来存放交换后的树 t1=swap(t->Lchild); //处理这个节点的左子树和右子树 t2=swap(t->Rchild);t->Lchild=t2; //交换处理后的左右树 t->Rchild=t1;return t; //用t返回处理的结果 } } 这是个递归过程,楼主可以把它理解成一个函数,...

设二叉树的存储结构为二叉链表,编写有关二叉树的递归算法:
答:(1)统计二叉树中度为1的结点个数。(2)统计二叉树中度为2的结点个数。(3)统计二叉树中度为0(叶结点)的结点个数。(4)统计二叉树的高度。(5)统计二叉树的宽度,即在二叉树的各层上,具有结点数最多的那一层上的结点总数。(6)从二叉树中删... 展开 972630969...

设二叉树以二叉链表为存储结构,编写一个后续遍历二叉树的非递归算法
答:include <stdio.h> include <malloc.h> include <stdlib.h> define STACK_INT_SIZE 100 define STACKINCREMENT 10 define OK 1 define ERROR 0 define TRUE 1 define FALSE 0 define OVERFLOW -2 typedef char TElemType;typedef int Status;typedef char SElemType;typedef struct BiTNode { TElemType...

...则该二叉树的深度为多少?若用二叉链表作为该完全二叉树的存储...
答:设一棵完全二叉树中有500个结点,则该二叉树的深度为多少?若用二叉链表作为该完全二叉树的存储结构,则共有多少个空指针域 蔡佟佟 | 浏览3532 次 |举报 我有更好的答案推荐于2017-12-16 13:36:54 最佳答案 1+2+4+8+16+32+64+128+245 = 500,这样算深度是9,空指针域 244*2+6*2+1=501 本回答由...

...为二叉排序树的算法,设此二叉树以二叉链表作存储结构
答:用递归:a=当前节点是否为排序树,是为1,不是为0 f(x)=1 当x为叶节点 f(x)= a&&f(x->lchid)&&f(x-rchild) 当x非叶节点 --- int IsAVTree(BiTree t){ int a=1;if(t->Child==NULL&&t->Rchild==NULL) return 1; //叶子节点判断 if((t->Lchild->data>t->data)||...

以二叉链表为存储结构,分别写出求二叉树结点总数及叶子总数的算法...
答:【答案】:(1)计算结点总数 int CountNode(BinTree*root){ intnum1,num2;if(root==Null)return(0);else if(root->lchild==Null&&rooot->rchild==Null)return(1);else { num 1=CountNode(root->lchild);num 2=CountNode(root->rchild);return(num1+num2+!);} } (2)计算叶子总数...

以二叉链表为存储结构,写出求二叉树高度和宽度的算法
答:以二叉链表为存储结构,分别写出求二叉树高度及宽度的算法。所谓宽度是指在二叉树的各层上,具有结点数最多的那一层上的结点总数。标准答案:①求树的高度思想:对非空二叉树,其深度等于左子树的最大深度加1。Int Depth(BinTree *T){int dep1,dep2;if(T==Null) return(0);else{dep1=Depth(T->lchild);...

已知一棵二叉树是以二叉链表的形式存储的,其结点结构说明如下: struct...
答:include<stdio.h> include<stdlib.h> /*①、求出以T为根的子树的结点个数。②、求出以T为根的子树的高度。*/ typedef struct node { int data;struct node * left;struct node * right;}BiTNode,*BiTree;/*①、求出以T为根的子树的结点个数。*/ void CountLeaf (BiTree T, int& co...

...则该二叉树的深度为多少?若用二叉链表作为该完全二叉树的存储...
答:如图 完全二叉树(存在单分支)对应的二叉链表 求空指针域即求先孩子结点个数×2再+1(此处的1就是单分支结点的空指针域)深度为9的完全二叉树前8层是满二叉树,共2⁸-1=255个结点 第9层有500-255=245个结点(245为奇数可知其父结点一定有单分支),其父结点个数为244/2+1=123(...