时间限制:1000MS 代码长度限制:10KB
提交次数:0 通过次数:0
题型: 编程题 语言: G++;GCC
Description
构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),'#'字符表示空树,构造二叉链表表示的二叉树T,并求此二叉树中度为2的节点总数,度为1的节点总数,度为0的节点总数 #include "stdio.h" #include "malloc.h" #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) { // 算法6.4 // 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树, // 构造二叉链表表示的二叉树T。 char ch; scanf("%c",&ch); if (ch=='#') T = NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR; ________________________ // 生成根结点 _______________________ // 构造左子树 _________________________ // 构造右子树 } return OK; } // CreateBiTree int main() //主函数 { //补充代码 }//main
输入格式
第一行输入先序次序二叉树中结点
输出格式
第一行输出度为2的节点数 第二行输出度为1的节点数 第三行输出度为0的节点数
输入样例
ABC###D##
输出样例
1 1 2
作者
30003021
Version:
0
#include "stdio.h"
#include "malloc.h"
//#define scanf scanf_s
#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) { // 算法6.4
// 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树,
// 构造二叉链表表示的二叉树T。
char ch;
scanf("%c", &ch);
if (ch == '#') T = NULL;
else {
if (!(T = (BiTNode*)malloc(sizeof(BiTNode)))) return ERROR;
T->data = ch; // 生成根结点
CreateBiTree(T->lchild); // 构造左子树
CreateBiTree(T->rchild); // 构造右子树
}
return OK;
} // CreateBiTree
Status PreOrderTraverse(BiTree T) {
// 前序遍历二叉树T的递归算法
//补全代码,可用多个语句
if (!T) return 0;
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
return 1;
} // PreOrderTraverse
Status InOrderTraverse(BiTree T) {
// 中序遍历二叉树T的递归算法
//补全代码,可用多个语句
if (!T) return 0;
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
return 1;
} // InOrderTraverse
Status PostOrderTraverse(BiTree T) {
// 后序遍历二叉树T的递归算法
//补全代码,可用多个语句
if (!T) return 0;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
return 1;
} // PostOrderTraverse
int dd2 = 0, dd1 = 0, dd0 = 0;
void d2(BiTree t)
{
if (!t)
return;
if (t->lchild && t->rchild)
++dd2;
else if (t->lchild && !t->rchild)
++dd1;
else if (!t->lchild && t->rchild)
++dd1;
else if (!t->lchild && !t->rchild)
++dd0;
d2(t->lchild);
d2(t->rchild);
}
int main() //主函数
{
BiTree t;
CreateBiTree(t);
d2(t);
printf("%d\n%d\n%d", dd2, dd1, dd0);
}//main