戳这里还有其他数据结构的题目噢
https://blog.csdn.net/qq_45724947/article/details/115625130?spm=1001.2014.3001.5501
在完善“12.6.4参考源程序”的前提下,设计并验证如下算法:按后序序列建立二叉树的二叉链表结构,求其单分支结点数目,双分支结点数目,并交换该二叉树
直接上代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void InitBiTree(BiTree *BT) {//构造空二叉树
BT = NULL;
}
//后序扩展序列递归建树
BiTree PreCreateBiTree(BiTree *BT) {
TElemType ch;
scanf("%c", &ch);
if(ch == '#') {
*BT = NULL;
}
else {
*BT = (BiTNode *)malloc(sizeof(BiTNode));
(*BT)->lchild = PreCreateBiTree(&((*BT)->lchild));
(*BT)->rchild = PreCreateBiTree(&((*BT)->rchild));
(*BT)->data = ch;
}
return *BT;
}
Status PreOrder(BiTree BT) { //先序遍历二叉树
if(BT) {
if(!(BT->data))
return ERROR;
printf("%c ", BT->data);
PreOrder(BT->lchild);
PreOrder(BT->rchild);
return OK;
}
}
//交换该树
Status Exchange(BiTree BT) {
if(BT) {
BiTree temp;
temp = BT->lchild;
BT->lchild = BT->rchild;
BT->rchild = temp;
Exchange(BT->lchild);
Exchange(BT->rchild);
}
}
//单分支结点
int SingleNodesNumber(BiTree BT) {
if(!BT)
return 0;
else {
int s1=0, s2=0;
s1 = SingleNodesNumber(BT->lchild);
s2 = SingleNodesNumber(BT->rchild);
if((BT->lchild && !BT->rchild) || (BT->rchild && !BT->lchild)) {
printf("%c\t", BT->data);
return s1 + s2 + 1;
}
else
return s1 + s2;
}
}
//双分支结点
int DoubleNodesNumber(BiTree BT) {
if(!BT)
return 0;
else {
int n = 0;
if(BT->lchild && BT->rchild)
n = 1;
int d1 = DoubleNodesNumber(BT->lchild);
int d2 = DoubleNodesNumber(BT->rchild);
if(n == 1) {
printf("%c\t", BT->data);
return d1 + d2 + 1;
}
else
return d1 + d2;
}
}
int main() {
BiTree BT;
TElemType ch;
InitBiTree(&BT);
printf("请输入二叉树:('#'结束)\n");
PreCreateBiTree(&BT);
PreOrder(BT);
printf("\n");
printf("该树单分支结点数目为:%d\n",SingleNodesNumber(BT));
printf("该树双分支结点数目为:%d\n",DoubleNodesNumber(BT));
printf("现在交换二叉树...\n");
Exchange(BT);
PreOrder(BT);
return 0;
}
//ab##c##
(代码如有雷同,可能存在借鉴他人部分代码情况)
(请不要直接复制使用。总结的代码仅供参考,希望读者借此代码自身可以理解学习)
如果代码对您有帮助,不要忘记评论收藏噢~