数据结构 c语言版二叉树(1) 建立一棵含有n个结点的二叉树,采用二叉链表存储;

题目:二叉树操作验证
1.实验目的
(1)掌握二叉树的逻辑结构
(2)掌握二叉树的二叉链表存储结构;
(3)掌握基于二叉链表存储的二叉树的遍历操作的实现。
2.实验内容
(1) 建立一棵含有n个结点的二叉树,采用二叉链表存储;
(2) 前序(或中序、后序)遍历该二叉树。

#include<stdio.h>
#include<stdlib.h>
typedef struct node *tree_pointer;
struct node{
char ch;
tree_pointer left_child,right_child;
};
tree_pointer root=NULL;
tree_pointer create(tree_pointer ptr)
{
char ch;
scanf("%c",&ch);
if(ch==' ')
ptr=NULL;
else{
ptr=(tree_pointer)malloc(sizeof(node));
ptr->ch=ch;
ptr->left_child=create(ptr->left_child);
ptr->right_child=create(ptr->right_child);
}
return ptr;
}
void preorder(tree_pointer ptr)
{
if(ptr){
printf("%c",ptr->ch);
preorder(ptr->left_child);
preorder(ptr->right_child);
}
}
void inorder(tree_pointer ptr)
{
if(ptr){
inorder(ptr->left_child);
printf("%c",ptr->ch);
inorder(ptr->right_child);
}
}
void postorder(tree_pointer ptr)
{
if(ptr){
postorder(ptr->left_child);
postorder(ptr->right_child);
printf("%c",ptr->ch);
}
}
void main()
{
printf("构建一个二叉树(结点数为n):\n");
root=create(root);
printf("前序遍历二叉树:\n");
preorder(root);
printf("\n");
printf("中序遍历二叉树:\n");
inorder(root);
printf("\n");
printf("后序遍历二叉树:\n");
postorder(root);
printf("\n");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-27
#include <stdio.h>
#include <stdlib.h>

struct BiTreeNode
{
char data;
struct BiTreeNode *rchild;
struct BiTreeNode *lchild;
};

void Create(struct BiTreeNode *&Tnode) //先序创建2叉链表
{
char ch;
scanf("%c",&ch);
if(ch=='#')
{
Tnode=NULL;
}
else
{
Tnode=new BiTreeNode;
Tnode->data=ch;
Create(Tnode->lchild);
Create(Tnode->rchild);
}
}

void PreOrder(struct BiTreeNode *&Tnode) //先序遍历2叉链表
{
struct BiTreeNode *p;
p=Tnode;
if(Tnode)
{
printf("%c ",Tnode->data);
PreOrder(Tnode->lchild);
PreOrder(Tnode->rchild);
}
}
void InOrder(struct BiTreeNode*&Tnode)//中序遍历2叉表
{
struct BiTreeNode *p;
p=Tnode;
if(Tnode)
{
InOrder(Tnode->lchild);
printf("%c ",Tnode->data);
InOrder(Tnode->rchild);
}
}
void PostOrder(struct BiTreeNode *&Tnode)//后序遍历2叉链表
{
struct BiTreeNode *p;
p=Tnode;
if(Tnode)
{

PostOrder(Tnode->lchild);
PostOrder(Tnode->rchild);
printf("%c ",Tnode->data);
}
}

int main()
{
struct BiTreeNode *Tnode;
Create(Tnode);
PreOrder(Tnode);
printf("\n");
InOrder(Tnode);
printf("\n");
PostOrder(Tnode);
printf("\n");
return 0;
}本回答被网友采纳

具有N个结点的二叉树,采用二叉链表存储,共有( )个空 链域.
这道数据题一共有N+1个空链域。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。满二叉树:如果一棵二叉树只有度为0的结点...

一颗二叉树具有n个节点 用二叉链表存储时,其中有( )个指针用于指向孩子...
1、这个问题有点不太清晰啊,由于是n个节点,每个节点有两个指针(左右指针),所以其2n个指针用于指向孩子节点。2、如果从实际指向了孩子节点的指针则为n-1个,因为n个节点的二叉树,除根结点以外都有自己的父亲结点或者说其都是一个孩子节点,所以有n-1个指针指向他们。3、函数(function)在数学中...

一棵有n个点儿的二叉树,它的空指针数量是多少?
有n+1个为空指针。(用二叉链表存储包含n个结点的二叉树,结点共有2n个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有n-1个结点的链域存放指向非空子结点的指针,还有n+1个空指针。)即有后继链接的指针仅n-1个。除根节点外,每个节点都有且仅有一个射向自己的分支...

用C语言建立一棵二叉树,使用二杈链表存储,对其进行后续遍历,输出后序...
define Maxsize 100 typedef int datatype;typedef struct node { datatype data;struct node* lchild;struct node* rchild;}BTNode;void CreatBTNode(BTNode *&b,char * str){ BTNode *p,*st[Maxsize];int top=-1;p=NULL;b=NULL;int j=0,k;char ch=str[j];while(ch!='\\0'){ switch...

数据结构(C语言版),求高手解决。。
4.由一棵二叉树的先序序列和后序序列可以惟一确定它( )【答案】× 5.完全二叉树中,若一个结点没有左孩子,则它必是树叶( )【答案】√ 6.用二叉链表存储n个结点的二叉树时,结点的2n个指针中有n+1个空指针( )【答案】√ 7.完全二叉树的存储结构通常采用顺序存储结构( ...

用二叉链表存储包含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+...

数据结构中用二叉链表保存有n个结点的二叉树,则结点中有n+1个空指针...
n个结点的二叉树有n+1个空指针。下面用数学归纳法证明。证明:n=1时,1个结点的二叉树有2个空指针域,成立。假设当n=k时成立,即k个结点的二叉树有k+1个空指针。那么,放入第k+1个结点会占用一个空指针,然后又产生2个空指针 所以,k+1个结点有k+1-1+2=k+2个空指针,即当n=k+1时...

若二叉树用二叉链表做存储结构,则在N个结点的二叉树链表中只有N-1个...
其实可以这样理解:N个节点的二叉树,若用二叉链表表示 则每个节点都有两个链域 也就是2N个 ,然后除了根节点外 每个节点都能但只能被指一次,所以有N-1个链域 不为空 因而 有N+1个链域为空,,

...树的储存结构,在具有n个结点的二叉链表中n(n>0),空链域的个数为...
以二叉链表作为二叉树的储存结构,在具有n个结点的二叉链表中n(n>0),空链域的个数为n+1。二叉链表结构描述:typedef struct CSNode{ ElemType data;struct CSNode *firstchild , *netsibling;} CSNode,* CSTree;由于二叉树的存储结构比较简单,处理起来也比较方便,所以有时需要把复杂的树,...

若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置...
【答案】:C 本题用后序遍历肯定没问题,不过用层次遍历也可以实现,所以选D也不能算错,相比之下,后序遍历实现的程序更容易理解,作为单项选择题,首选的应该是C。

相似回答