用二叉链表存储树
1. 为什么用二叉链表存储树,则根节点的右指针是空 为什么不是指向右孩子
将一棵树转化为二叉树,此时二叉树的根节点的右指针为空,
因为这个指针是用来指向另一棵树的根节点的。具体情况你
也可以参看森林转化为二叉树的方法。
2. 利用二叉链表存储树,则根节点的右指针是空的,这是为什么呢,谢谢
二叉链表存储树结构,那么任意节点的左孩子指向该结点的孩子结点,右孩子指针指向该节点的兄弟节点,因为这里是树,不是森林,所以树的根节点没有兄弟结点,则右指针是空。
3. 利用二叉链表存储树,则根结点的右指针是 为什么答案不是右孩子是空
因为存的是一般树,二叉链表储存要先化成二叉树,根节点没有兄弟,右指针为空
4. 用二叉链表存储树,为什么根结点的右指针是空,数据结构
采用二叉树结构存储树或森林,即树/森林的左子右兄表示法。
二叉树中节点的左“孩子”是原树/森林对应节点的“长子节点”,右“孩子”是原树/森林对应节点的“兄弟节点”。
而树的根节点是没有兄弟的,故在二叉链表中它的右指针为空()
5. 运用C++如何使用二叉链表存储二叉树,遍历输出叶子节点路径,递归输出叶子节点值,输出树的深度
构造的二叉树结构如下:
6. 用二叉链表存储包含N个结点的二叉树,结点的2N个指针域中有N+1个空指针
首先
二叉树的节点都有2个指针。每个节点有0个、1个或2个空指针。对应的有2个、1个、0个非空指针。非空指针的总数就是二叉树的边的个数。
设一个二叉树x个节点含有0个空指针,y个节点有1个空指针,z个节点有2个空指针
有如下等式
1、 x+y+z=N 节点总数为N,题目叙述
2、 y+2*z=N+1空指针个数为N+1,题目叙述
3、 2*x+y= N-1 二叉树的边数。树的边数=树的节点数-1
解以上方程组就可得出树的几种类型的节点数了。你就可以构造这个二叉树了。如果方程组有解
一般可以构造的二叉树是很多的。
7. 二叉树只能采用二又链表来存储.,这个是否正确,为什么
不是的.
二叉链表只是最直观的一种存储方式.而事实上,大部分的情况都不会使用二叉链表.除了一些动态调整树的算法比如平衡树.
更为普遍的存储方式是用线性表来储存二叉树.这种方式下,线性表N存储的节点是N div 2的儿子节点.
8. 以二叉链表作为二叉树的储存结构,在具有n个结点的二叉链表中n(n>0),空链域的个数为()
以二叉链表作为二叉树的储存结构,在具有n个结点的二叉链表中n(n>0),空链域的个数为n+1。
二叉链表结构描述:
typedef struct CSNode{
ElemType data;
struct CSNode *firstchild , *netsibling;
} CSNode,* CSTree;
由于二叉树的存储结构比较简单,处理起来也比较方便,所以有时需要把复杂的树,转换为简单的二叉树后再作处理。
(8)用二叉链表存储树扩展阅读:
二叉树类型:
1、完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。
2、满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树。
3、平衡二叉树——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
9. 二叉链表存储二叉树的先序遍历算法
二叉链表存储二叉树的先序遍历算法,通常采用递归的算法实现。首先访问二叉树的根节点,然后递归遍历它的左子树,最后,递归遍历他的右子树。
10. 若用二叉链表作为二叉树的存储表示,试编写算法交换二叉树中各结点的左右子数。
递归:
void exchange(BTree *rt){
BTree *temp = NULL;
if(rt->lchild == NULL && rt->rchild == NULL)
return;
else{
temp = rt->lchild;
rt->lchild = rt->rchild;
rt->rchild = temp;
}
if(rt->lchild)
exchange(rt->lchild);
if(rt->rchild)
exchange(rt->rchild);
}
非递归:
Stack是一个定义好的通用堆栈类型,支持初始化/进站/出战等操作
int Exchange(BiTree *T)
{
Stack s;
BiTree *p;
InitStack(s);
p=T;
while(p||!StackEmpty(s)){
if(p){
push(s,p);
p->Lchild;
}
else{
pop(s,p);
t=p->Rchild;
p->Rchild=p->Lchild;
p->Lchild=t;
p-=->Lchild;
}
}
return 1;
}