题目大意:给你一个序列,让你用这个序列建立一个 二叉搜索树。然后在让你在输出一个序列,让这个序列可以构成和上面一样的二叉搜索树,且序列的 字典序最小。
根据二叉搜索树的定义,左子树小右子树大,所以直接输出先序遍历就行了!!!也就是用题目给的序列建好二叉搜索树,然后输出他的前序遍历(最近刚开始学数据结构,为毛数据结构都是指针啊!!!最怕的就是指针,因为C语言没好好学他,没办法只能克服了),下面的代码大家共勉,有什么问题还请多多指教,我学的也不好,共同进步!
As we know,the shape of a binary search tree is greatly related to the order of keys we insert. To be precisely:
1. insert a key k to a empty tree, then the tree become a tree with
only one node;
2. insert a key k to a nonempty tree, if k is less than the root ,insert
it to the left sub-tree;else insert k to the right sub-tree.
We call the order of keys we insert “the order of a tree”,your task is,given a oder of a tree, find the order of a tree with the least lexicographic order that generate the same tree.Two trees are the same if and only if they have the same shape.
1. insert a key k to a empty tree, then the tree become a tree with
only one node;
2. insert a key k to a nonempty tree, if k is less than the root ,insert
it to the left sub-tree;else insert k to the right sub-tree.
We call the order of keys we insert “the order of a tree”,your task is,given a oder of a tree, find the order of a tree with the least lexicographic order that generate the same tree.Two trees are the same if and only if they have the same shape.
4 1 3 4 2
1 3 2 4
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Tnode
{
int v;
struct Tnode *left,*right;
}Node;//建立结点
Node *Buildtree(Node *root,int n) //建树
{
if(root==NULL)
{
root=(Node*)malloc(sizeof(Node));
root->v=n;
root->left=root -> right =NULL;
return root;
}
if(root ->v>n)
root -> left= Buildtree(root -> left,n);
else
root -> right=Buildtree(root -> right,n);
return root; //每次返回头指针,才能进行下一次的比较
}
void DLR(Node *root,int n) //前序遍历
{
if(n!=1)
printf(" %d",root -> v);
else
printf("%d",root->v);
if(root->left!=NULL)
DLR(root->left,2);
if(root->right!=NULL)
DLR(root->right,2);
}
int main()
{
int n,m,i;
Node *root=NULL;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
scanf("%d",&m);
root=Buildtree(root,m);
}
DLR(root,1);
printf("\n");
}
return 0;
}