Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
    }
  }
}