1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 顺序二叉树(c语言)(创建 先序遍历)(头歌)

顺序二叉树(c语言)(创建 先序遍历)(头歌)

时间:2024-03-31 21:49:15

相关推荐

顺序二叉树(c语言)(创建 先序遍历)(头歌)

#include <stdio.h>#include <stdlib.h>/* 定义顺序存储结构*/#define MaxSize 14//根据需求定struct seqTree{char *data; //数据int length;//记录结点数};/*辅助功能:逐个输出顺序表的元素,元素之间以空格为界*/void printTree(struct seqTree *T){int i;for (i = 0;i <= T->length;i++){printf("%c ",T->data[i]);}}struct seqTree* createSeqTree(){char x;struct seqTree* T;T = (struct seqTree*)malloc(sizeof(struct seqTree));T->data = (char*)malloc(MaxSize * sizeof(char));T->length = 0;//初始化树for (int i = 0; i < MaxSize; i++){scanf("%c", &x);if (x == '\0'){break;}else {T->data[i] = x;T->length++;}}return T;}/*第二关,返回二叉树的根结点的值,若二叉树为空,则返回#*/char root(struct seqTree *T){if(T->length==0){return '#';}else {return T->data[0];}}/*第二关,求二叉树T中指定结点ch的双亲结点,返回值是双亲结点的下标,若双亲不存在,则返回-1*/int parent(struct seqTree *T ,char ch){for(int i=0;i<T->length;i++){if(T->data[i]==ch){if(i==0){return -1;}else if(T->data[(i-1)/2]){return (i-1)/2;} else return -1;}}}/*第二关,求二叉树T中指定结点ch的左孩子的下标,若左孩子不存在,则返回-1*/int leftChild(struct seqTree *T ,char ch){for(int i=0;i<T->length;i++){if(T->data[i]==ch){if(T->data[2*i+1]!=' '){return 2*i+1;}else return -1;}}}/*第二关,求二叉树T中指定结点ch的右孩子的下标,若左孩子不存在,则返回-1*/int rightChild(struct seqTree *T ,char ch){for(int i=0;i<T->length;i++){if(T->data[i]==ch){if(T->data[2*i+2]!=' '){return 2*i+2;}else return -1;}}}/*第三关:层序遍历二叉树,输出遍历得到的结点,结点之间不需要空格*/void levelOrder(struct seqTree *T ){int i;for (i = 0;i <= T->length;i++){if(T->data[i]!=' ')printf("%c",T->data[i]);}}/*第四关:先序遍历二叉树,输出遍历得到的结点,结点之间不需要空格*/void preOrder(struct seqTree *T,int n ){if(T->data[n]==' '||n>T->length||T->data[n]=='\0'){return;}else{printf("%c",T->data[n]);preOrder(T,n*2+1);preOrder(T,n*2+2);}}int main(void){struct seqTree *T = createSeqTree();//printTree(T); //测评第一关时,把本行代码放开//printf("%c\n",root(T)); // 测评第二关时,把该代码块放开//printf("%d\n",leftChild(T,'A'));//printf("%d\n",rightChild(T,'A'));//printf("%d\n",parent(T,'A'));//levelOrder(T); //测评第三关时,把本行代码放开 preOrder(T,0); //测评第四关时,把本行代码放开 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。