按先序次序建立以下二叉树,然后按先序的顺序输出结点的值、层次、左右孩子结点;用C语言编写,初学数据结
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/20 10:25:32
按先序次序建立以下二叉树,然后按先序的顺序输出结点的值、层次、左右孩子结点;用C语言编写,初学数据结
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef char elemtype;
typedef struct BiTNode{
elemtype data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//构造二叉树
Status CreateBiTree(BiTree &T){
elemtype ch;
ch=getchar();
if(ch==' '){T=NULL;}
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return FALSE;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
// 先序遍历
void PreOrderTraverse(BiTree T){
if(T!=NULL){
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//叶子节点的个数
Status Leafnumber(BiTree T){
int num1=0,num2=0;
if(T==NULL)
return 0;
else if (T->lchild==NULL&&T->rchild==NULL) return 1;
else
{
num1=Leafnumber(T->lchild);
num2=Leafnumber(T->rchild);
return(num1+num2);
}
}
//树的深度
Status DepthTree(BiTree T){
int llength=0,rlength=0;
if(T==NULL) return 0;
else{
llength=DepthTree(T->lchild);
rlength=DepthTree(T->rchild);
return(llength>rlength)?(llength+1):(rlength+1);
}
}
void main()
{
BiTree s;
printf("输入字符串,使用空格代表空\n");
CreateBiTree(s);
printf("先序输出:\n");
PreOrderTraverse(s);
printf("\n树的深度:%d\n",DepthTree(s));
getch();
}
再问: 怎么输出每个结点的层次
再答: //增加个变量i,修改一下PreOrderTraverse #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char elemtype; typedef struct BiTNode{ elemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //构造二叉树 Status CreateBiTree(BiTree &T){ elemtype ch; ch=getchar(); if(ch==' '){T=NULL;} else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) return FALSE; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return OK; } // 先序遍历 void PreOrderTraverse(BiTree T,int i) { if(T!=NULL) { printf("%c\t%d\n",T->data,i); PreOrderTraverse(T->lchild,i+1); PreOrderTraverse(T->rchild,i+1); } } //叶子节点的个数 Status Leafnumber(BiTree T){ int num1=0,num2=0; if(T==NULL) return 0; else if (T->lchild==NULL&&T->rchild==NULL) return 1; else { num1=Leafnumber(T->lchild); num2=Leafnumber(T->rchild); return(num1+num2); } } //树的深度 Status DepthTree(BiTree T) { int llength=0,rlength=0; if(T==NULL) return 0; else { llength=DepthTree(T->lchild); rlength=DepthTree(T->rchild); return(llength>rlength)?(llength+1):(rlength+1); } } void main() { BiTree s; int i=1; printf("输入字符串,使用空格代表空\n"); CreateBiTree(s); printf("先序输出:\n值\t层次\n"); PreOrderTraverse(s,i); printf("\n树的深度:%d\n",DepthTree(s)); getch(); }
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef char elemtype;
typedef struct BiTNode{
elemtype data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//构造二叉树
Status CreateBiTree(BiTree &T){
elemtype ch;
ch=getchar();
if(ch==' '){T=NULL;}
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
return FALSE;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
// 先序遍历
void PreOrderTraverse(BiTree T){
if(T!=NULL){
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//叶子节点的个数
Status Leafnumber(BiTree T){
int num1=0,num2=0;
if(T==NULL)
return 0;
else if (T->lchild==NULL&&T->rchild==NULL) return 1;
else
{
num1=Leafnumber(T->lchild);
num2=Leafnumber(T->rchild);
return(num1+num2);
}
}
//树的深度
Status DepthTree(BiTree T){
int llength=0,rlength=0;
if(T==NULL) return 0;
else{
llength=DepthTree(T->lchild);
rlength=DepthTree(T->rchild);
return(llength>rlength)?(llength+1):(rlength+1);
}
}
void main()
{
BiTree s;
printf("输入字符串,使用空格代表空\n");
CreateBiTree(s);
printf("先序输出:\n");
PreOrderTraverse(s);
printf("\n树的深度:%d\n",DepthTree(s));
getch();
}
再问: 怎么输出每个结点的层次
再答: //增加个变量i,修改一下PreOrderTraverse #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char elemtype; typedef struct BiTNode{ elemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //构造二叉树 Status CreateBiTree(BiTree &T){ elemtype ch; ch=getchar(); if(ch==' '){T=NULL;} else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) return FALSE; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return OK; } // 先序遍历 void PreOrderTraverse(BiTree T,int i) { if(T!=NULL) { printf("%c\t%d\n",T->data,i); PreOrderTraverse(T->lchild,i+1); PreOrderTraverse(T->rchild,i+1); } } //叶子节点的个数 Status Leafnumber(BiTree T){ int num1=0,num2=0; if(T==NULL) return 0; else if (T->lchild==NULL&&T->rchild==NULL) return 1; else { num1=Leafnumber(T->lchild); num2=Leafnumber(T->rchild); return(num1+num2); } } //树的深度 Status DepthTree(BiTree T) { int llength=0,rlength=0; if(T==NULL) return 0; else { llength=DepthTree(T->lchild); rlength=DepthTree(T->rchild); return(llength>rlength)?(llength+1):(rlength+1); } } void main() { BiTree s; int i=1; printf("输入字符串,使用空格代表空\n"); CreateBiTree(s); printf("先序输出:\n值\t层次\n"); PreOrderTraverse(s,i); printf("\n树的深度:%d\n",DepthTree(s)); getch(); }
按先序次序建立以下二叉树,然后按先序的顺序输出结点的值、层次、左右孩子结点;用C语言编写,初学数据结
试编写计算二叉树深度、所有结点总数、叶子结点数、双孩子结点个数、单孩子结点个数的算法
数据结构C递归的方法 前序 中序 后序 交换二叉树每个结点的左孩子和右孩子 结点个数 深度 叶结点个数
二叉树根结点的层次是什么意思?
二叉树结点的计算?某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则后序遍历
数据结构已知一个二叉树中结点的左右孩子为left和right,r指向二叉树的某一结点.请用C编一个非递归函数postfi
怎么求二叉树的结点的层次啊
二叉树的结点指针值是什么?
编写算法:已知二叉排序树按二叉链表形式存储,树中结点各不相同,欲得到一个由小到大的结点值递增序列
二叉树结点计算问1、 深度为m的满二叉树有几个结点?2、设二叉树根结点的层次为0,对含有100个根结点的二叉树,可能的最
有30个结点的完全二叉树,编码为15的结点的父结点的编号为__,其右孩子结点的编号为__
设根结点的层次为1,则深度为k的二叉树的各结点数位多少