题目截图:
思路:
二叉排序树的操作详解请看另一篇。
代码如下:
1 /* 2 二叉排序树 3 */ 4 5 #include6 #include 7 #include 8 #include 9 #include 10 #include 11 12 // 二叉树结构体定义 13 typedef struct _node {14 int data;15 struct _node *lchild, *rchild;16 } node;17 18 // 二叉排序树插入结点 x 19 void insert(node** root, int x) {20 if(*root == NULL) { // 若为空树,即为插入位置21 // 新建结点 22 node* p = (node*)malloc(sizeof(node));23 p->data = x; 24 p->lchild = p->rchild = NULL;25 (*root) = p; // 插入新结点 26 return;27 }28 if(x == (*root)->data) { // 重复节点,不处理 29 return;30 } else if(x < (*root)->data) { // 小于根结点权值 31 insert(&(*root)->lchild, x); // 插入到左子树 32 } else { // 大于根结点权值 33 insert(&(*root)->rchild, x); // 插入到右子树 34 }35 }36 37 // 先序遍历 38 void preorder(node* root) {39 if(root == NULL) {40 return;41 }42 printf("%d ", root->data);43 preorder(root->lchild);44 preorder(root->rchild);45 }46 47 // 中序遍历 48 void inorder(node* root) {49 if(root == NULL) {50 return;51 } 52 inorder(root->lchild);53 printf("%d ", root->data);54 inorder(root->rchild);55 }56 57 // 后续遍历 58 void postorder(node* root) {59 if(root == NULL) {60 return;61 } 62 postorder(root->lchild);63 postorder(root->rchild);64 printf("%d ", root->data);65 }66 67 int main() {68 int n;69 while(scanf("%d", &n) != EOF) {70 int i;71 node* root = NULL;72 for(i=0; i