链接:https://vjudge.net/problem/Aizu-ALDS1_8_A
思路
《挑战程序设计竞赛2:算法与数据结构》一书上第169页的练习题。
二叉搜索树的构建,没什么好说的,就说一下二叉搜索树的一些基本知识吧。
-
二叉搜索树,又叫二叉排序树、二叉查找树,名字挺多。
-
二叉搜索树可以是一颗空树;如果不是空树,那么这颗二叉树必满足:
左子树上所有的结点值都小于根节点;右子树上所有的结点值都大于根节点。 -
二叉搜索树的中序遍历的结果一定是一个递增序列。
了解了这些,这道题就没问题了。
伊丽莎白!
代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
int data;
node *left,*right,*parent;
};
node *tree,*NIL;
void inserts(int x)
{
node *pre=NIL;
node *q=tree;
node *p=(node*)malloc(sizeof(node));
p->data=x;
p->left=NIL;
p->right=NIL;
while(q!=NIL)
{
pre=q;
if(q->data > p->data)
q=q->left;
else
q=q->right;
}
if(tree==NIL)
tree=p;
else
{
if(pre->data > p->data)
pre->left=p;
else
pre->right=p;
}
}
void inorder(node *k)
{
if(k==NIL)
return;
inorder(k->left);
printf(" %d",k->data);
inorder(k->right);
}
void preorder(node *k)
{
if(k==NIL)
return;
printf(" %d",k->data);
preorder(k->left);
preorder(k->right);
}
int main()
{
int n,num;
string ss;
cin>>n;
for(int i=0; i<n; i++)
{
cin>>ss;
if(ss=="insert")
{
cin>>num;
inserts(num);
}
else
{
inorder(tree);
cout<<endl;
preorder(tree);
cout<<endl;
}
}
}
认真系列×4!