bool isSymmetric( struct TreeNode * root ) { if(!root || (!(root->left) && !(root->right))) return true; if(!root->left || !root->right) return false; int count = 1; struct TreeNode **lStack = (struct TreeNode**)malloc(sizeof(struct TreeNode*)); struct TreeNode **rStack = (struct TreeNode**)malloc(sizeof(struct TreeNode*)); lStack[0] = root->left; rStack[0] = root->right; while(count) { int lIndex = 0, rIndex = 0; for(int i = 0; i < count; i++) { if(!lStack[i] || !rStack[count-i-1]) { if(!lStack[i] && !rStack[count-i-1]) continue; return false; } if(lStack[i]->val != rStack[count-i-1]->val) return false; } int lCount=0, rCount=0; lStack = fillNext(lStack, count, &lCount); rStack = fillNext(rStack, count, &rCount); if(lCount != rCount) return false; count = lCount; } return true; }
int main(void) { preparation_t queries[] = { { "rate", "SELECT connectionStrength((select id from mode),$2,$1)" }, { "getpage", "select strength,title,songs.id from connections inner join songs on connections.blue = songs.id where red = (select id from mode) order by strength desc OFFSET $1 LIMIT $2;" } }; PQinit(); gtk_init(NULL,NULL); prepareQueries(queries); GtkBuilder* builder = gtk_builder_new_from_string(gladeFile,gladeFileSize); GtkWidget* top = GTK_WIDGET(gtk_builder_get_object(builder,"top")); GtkTreeSelection* selection = GTK_TREE_SELECTION( gtk_builder_get_object(builder,"song-selection")); GtkButton* rateup = GTK_BUTTON( gtk_builder_get_object(builder,"rateup")); GtkButton* ratedown = GTK_BUTTON( gtk_builder_get_object(builder,"ratedown")); g_signal_connect(G_OBJECT(rateup),"clicked",G_CALLBACK(yay),selection); g_signal_connect(G_OBJECT(ratedown),"clicked",G_CALLBACK(nay),selection); GtkListStore* model = GTK_LIST_STORE( gtk_builder_get_object(builder,"songs")); fillNext(selection,model); gtk_widget_show_all(top); gtk_main(); }