当前位置: 代码迷 >> 综合 >> 【牛客】二叉排序树(C++)
  详细解决方案

【牛客】二叉排序树(C++)

热度:68   发布时间:2023-09-19 06:15:24.0

题目描述

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

输入描述:

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

输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。
#include <iostream>
#include <cstdio>using namespace std;struct TreeNode
{int data;TreeNode* leftchild;TreeNode* rightchild;TreeNode(int x):data(x),leftchild(NULL),rightchild(NULL){}
};TreeNode* Insert(TreeNode* root,int x)
{if(root==NULL){root=new TreeNode(x);}else if(x<root->data){root->leftchild=Insert(root->leftchild);}else if(x>root->data){root->rightchild=Insert(root->rightchild);}
}void Preoder(TreeNode *root)
{if(root==NULL)return ;printf("%d ",root->data);Preoder(root->leftchild);Preoder(root->rightchild);return ;
}void Inoder(TreeNode *root)
{if(root==NULL)return ;Preoder(root->leftchild);printf("%d ",root->data);Preoder(root->rightchild);return ;
}void Postoder(TreeNode *root)
{if(root==NULL)return ;Preoder(root->leftchild);Preoder(root->rightchild);printf("%d ",root->data);return ;
}int main()
{int n;while(scanf("%d",&n)!=EOF){TreeNode* root=NULL;for(int i=0;i<n;i++){int x;scanf("%d",&x);root=Insert(root,x);}Preoder(root);printf("\n");Inoder(root);printf("\n");Postoder(root);printf("\n");}return 0;
}

 

  相关解决方案