コード例 #1
0
static void rightleft(const struct TreeNode *root)
{
	if (!root)
		return;
	rightleft(root->right);
	inorder2[p++] = root->val;
	rightleft(root->left);
}
コード例 #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);
}
コード例 #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);
    }
  }
}