二叉树的建立与基本操作
测试用例
ab#d##ce###
BiTree↵ a↵
b↵ d↵
c↵ e↵
pre_sequence : abdce↵ in_sequence : bdaec↵ post_sequence : dbeca↵ Number of leaf: 2↵ BiTree swapped↵ a↵
c↵ e↵
b↵ d↵
pre_sequence : acebd↵ in_sequence : ceadb↵ post_sequence : ecdba↵
if(p==NULL) { kongge=kongge-4; return; } else {
for( j=0 ; j<kongge ; j++ ) { printf(" "); } printf("%c\n",p->data); kongge=kongge+4; AoruPrint(p->left); kongge=kongge+4; AoruPrint(p->right); kongge=kongge-4; return; } }
3.(重点)第三步:先序遍历 中序遍历后序 遍历
void Pre_sequence(TreeNode *p) 先序 { if(p==NULL) return; else {
printf("%c",p->data); Pre_sequence(p->left); Pre_sequence(p->right); return; }}
if(p==NULL) return; else {
Post_sequence(p->left); Post_sequence(p->right); printf("%c",p->data); return; }}
4.第二步:二叉树子树变序 void SwappedTree(TreeNode *p) {
5.(重点)第五步:计算二叉树的叶子结点个 数
int Countleave(TreeNode *p) {
if(!p) return 0; if( p->left==NULL && p->right==NULL ) return 1; else return Countleave(p->left)+Countleave(p>right); }
15. 二叉树的建立与基本操作
题目要求: 编写程序实现二叉树的如下操作:
1) 建立二叉链表 2) 二叉树的先序、中序、后序遍历 3) 求解二叉树的叶子结点个数 4) 将二叉树中所有结点的左、右子树相互交换 输入:
扩展二叉树先序序列:ab#d##ce###。其中#代表空指针。 输出:
二叉树的凹入表示 二叉树的先序序列、中序序列、后序序列 二叉树叶子结点个数 左、右子树相互交换后的二叉树的凹入表示 左、右子树相互交换后的二叉树的先序序列、中序序列、后序 序列。 说明: 在输出凹入表示的二叉树时,先输出根结点,然后依次输出左 右子树,上下层结点之间相隔 3 个空格。
{ TreeNode *pc; char ch; scanf("%c",&ch);
if( ch=='#' ) return NULL;
else {
pc=(TreeNode*)malloc(sizeof(TreeNode));
pc->data=ch;
//建立(根)结点
pc->left=CreateTree();
定义二叉树:
typedef struct TreeNode { char data; struct TreeNode *left,*right; //左
右孩子指针
} TreeNode;
重点题目:算法见代码
1.(重点)第一步:建立二叉链表 பைடு நூலகம்reeNode *p; p=CreateTree();
TreeNode *CreateTree()
//递归构造左子树链表
pc->right=CreateTree(); //递归构造右子树链表
return pc;
}
}
2.第二步:二叉树的凹入表示 定义全局变量:int kongge=0;
printf("BiTree\n"); AoruPrint(p); void AoruPrint(TreeNode *p) { int j;
void In_sequence(TreeNode *p) 中序 {
if(p==NULL) return; else {
In_sequence(p->left); printf("%c",p->data); In_sequence(p->right); return; }}
void Post_sequence(TreeNode *p) 后序 {
TreeNode *pc; if(p==NULL) return; else {
/*只要有一个孩子子树不是空就交换*/ if( p->left!=NULL || p->right!=NULL ) {
pc=p->left; p->left=p->right; p->right=pc; } SwappedTree(p->left); SwappedTree(p->right); return; } }