二叉排序树

xiaoxiao2021-02-28  37

题目描述:

输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历

输入描述:

输入第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数

输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。 每种遍历结果输出一行。每行最后一个数据之后有一个空格。

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出

代码

#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node*left,*right; }Node; void buildTree(Node *&root,int data) { if(root==NULL) { root=(Node*)malloc(sizeof(Node)); root->data=data; root->left=root->right=NULL; } else //不重复 { if(data<root->data) buildTree(root->left,data); else if(data>root->data) buildTree(root->right,data); } } void f1(Node *root)//先序 { if(root!=NULL) { printf("%d ",root->data); f1(root->left); f1(root->right); } } void f2(Node *root)//中序 { if(root!=NULL) { f2(root->left); printf("%d ",root->data); f2(root->right); } } void f3(Node *root)//后序 { if(root!=NULL) { f3(root->left); f3(root->right); printf("%d ",root->data); } } void f(Node *root) { f1(root); printf("\n"); f2(root); printf("\n"); f3(root); printf("\n"); } int main() { Node *root=NULL; int n,t; while(scanf("%d",&n)!=EOF) { while(n--) { scanf("%d",&t); buildTree(root,t); } f(root); root=NULL;//假装清空 } return 0; }

注:水题

转载请注明原文地址: https://www.6miu.com/read-2624232.html

最新回复(0)