static void leftright(const struct TreeNode *root) { if (!root) return; leftright(root->left); if (!inorder1) { maxp = 8; p = 0; inorder1 = malloc(maxp * sizeof(inorder1[0])); } if (p >= maxp) { maxp += 8; inorder1 = realloc(inorder1, maxp * sizeof(inorder1[0])); } inorder1[p++] = root->val; leftright(root->right); }
bool isSymmetric(struct TreeNode *root) { inorder1 = inorder2 = 0; p = 0; leftright(root); inorder2 = malloc(p * sizeof(inorder2[0])); p = 0; rightleft(root); p = !memcmp(inorder1, inorder2, p * sizeof(inorder1[0])); if (p) { p = 0; left_pre(root); p = 0; right_pre(root); p = !memcmp(inorder1, inorder2, p * sizeof(inorder1[0])); } free(inorder1); free(inorder2); return(p); }
void avl::rebalance(avl_node* root){ if(root -> get_balance() == -2){ if((root -> get_lchild()) -> get_balance() == -1){ leftleft(root); } else{ leftright(root); } } else{ if((root -> get_rchild()) -> get_balance() == 1){ //DEBUG!! // print_tree(); //DEBUG!! rightright(root); } else{ rightleft(root); } } }