| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
第一次完整的写出 二叉搜索树 的所有操作,320ms过,不要用cin和cout,#include<iostream> using namespace std; typedef struct node { int date , key; struct node * left; struct node * right; struct node * father; }Bsttree, *Bst_tree; void BST_Insert( Bst_tree &T , Bsttree nod ); Bst_tree Max_tree( Bst_tree T ); Bst_tree Min_tree( Bst_tree T ); void delete_node( Bst_tree T ); void Transport_tree( Bst_tree T , Bst_tree K ); Bst_tree root = NULL; int main() { int bzhi; while( scanf("%d",& bzhi) && bzhi!=0 ) { if( bzhi==1 ) { Bsttree t; scanf("%d%d", &t.date, &t.key); BST_Insert( root , t ); } else if( bzhi==2 ) Max_tree( root ); else Min_tree( root ); } //system("pause"); return 0; } void BST_Insert( Bst_tree & T , Bsttree nod ) { if( !T ) { T = new Bsttree; T->date = nod.date; T->key = nod.key; T -> left = NULL; T -> right = T ->father = NULL; } else { if( nod.key <= T->key ) { if( T -> left == NULL ) { Bst_tree new_node; new_node = new Bsttree; T -> left = new_node; new_node->date = nod.date; new_node->key = nod.key; new_node -> left = new_node ->right = NULL; new_node -> father = T; } else { BST_Insert( T->left , nod ); } } else { if( T -> right == NULL ) { Bst_tree new_node; new_node = new Bsttree; T -> right = new_node; new_node->date = nod.date; new_node->key = nod.key; new_node -> left = new_node ->right =NULL; new_node -> father = T; } else { BST_Insert( T->right , nod ); } } } } Bst_tree Max_tree( Bst_tree T ) { if( !T ) printf("0\n"); else { if( T->right ) { Max_tree( T->right ); } else { Bst_tree nod = T; printf( "%d\n" ,T->date ); delete_node( T ); return nod; } } } Bst_tree Min_tree( Bst_tree T ) { if( !T ) printf("0\n"); else { if( T->left ) { Min_tree( T->left ); } else { Bst_tree nod = T; printf("%d\n" ,T->date ); delete_node( T ); return nod ; } } } void delete_node( Bst_tree T ) { if( T->left == NULL ) Transport_tree( T , T->right ); else if( T->right == NULL ) Transport_tree( T , T->left ); else { Bst_tree nod = Min_tree( T->right ); if( nod->father!=T ) { Transport_tree( nod , nod->right ); nod->right = T->right; nod->right->father = nod; } Transport_tree( T , nod ); nod->left = T->left; nod->left->father = nod; } } void Transport_tree( Bst_tree T , Bst_tree K ) { if( T->father==NULL ) root = K; else if( T == T->father->left ) T->father->left = K; else T->father->right = K; if( K ) K->father = T->father; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator