Falling Leaves
http://poj.org/problem?id=1577
View Code
#include <stdio.h> #include <string.h> #include <malloc.h> typedef struct BiTree { char ch; struct BiTree *lchild; struct BiTree *rchild; }BiTree; BiTree *createBiTree(char ch) { BiTree *leaf = (BiTree *)malloc(sizeof(BiTree)); leaf->ch = ch; leaf->lchild = NULL; leaf->rchild = NULL; return leaf; } BiTree *insertBiTree(BiTree *root, char ch) { BiTree *leaf = root; if(root == NULL) { root = createBiTree(ch); return root; } while(leaf) { if((leaf->ch) > ch) { if(leaf->lchild == NULL) { leaf->lchild = createBiTree(ch); break; } else { leaf = leaf->lchild; } } else if((leaf->ch) < ch) { if(leaf->rchild == NULL) { leaf->rchild = createBiTree(ch); break; } else { leaf = leaf->rchild; } } } return root; } void preorder(BiTree *root) { if(root!=NULL) { printf("%c", root->ch) ; preorder(root->lchild) ; preorder(root->rchild) ; } } int main() { char str[50], p[10000]; int length; int i; BiTree *root = NULL; while(1) { scanf("%s", str); if(strcmp(str, "*") == 0 || strcmp(str, "$") == 0) { length = strlen(p); for(i = length-1; i >= 0; i--) { root = insertBiTree(root, p[i]); } preorder(root); printf("\n"); if(strcmp(str, "$") == 0) break; root = NULL; memset(p, '\0', sizeof(p)); } else { strcat(p, str); } } return 0; }
题目大意:按照题目给出的叶子顺序,找出原来的二叉排序树。
解:按照题目给出的顺序,倒过来插入到二叉排序树中即可构造原来的树。