Пример #1
0
void c_test_ins_tree_height(void) {
  int sizeOfElement = sizeof(struct complexThing);
  Tree tree = new_tree(sizeOfElement, navigateComplex, copyComplex, destroyComplex, NULL);
  CU_ASSERT_TRUE(get_tree_height(tree) == 0);

  Complex *c = malloc(sizeof(struct complexThing));
  c->int_regular = 10;
  c->int_pointer = malloc(sizeof(int));
  *c->int_pointer = 15;

  tree_insert(&tree, c, NULL);

  CU_ASSERT_TRUE(get_tree_height(tree) == 1);

  if (tree != NULL) {
    destroy_tree(&tree); 
  }

  if (c != NULL) {
    if (c->int_pointer != NULL) {
      free(c->int_pointer);
    }

    free(c);
  }
 
}
Пример #2
0
void set_node_height(AVL* node) {
	int lheight,rheight;
	if (node == NULL)
		return;
	lheight = get_tree_height(node->lchild);
	rheight = get_tree_height(node->rchild);
	node->height = lheight - rheight;	
}
Пример #3
0
int get_tree_height(AVL* node) {
	int lheight,rheight,height;
	if (node == NULL)
		return -1;
	lheight = get_tree_height(node->lchild);
	rheight = get_tree_height(node->rchild);
	height = lheight > rheight ? lheight : rheight;
	return height + 1;
}
Пример #4
0
int get_tree_height(treenode_t *tree_root) {
    if (tree_root == gNil || tree_root == NULL) 
        return -1;

    int left_height = get_tree_height(tree_root->left_child);
    int right_height = get_tree_height(tree_root->right_child);
    if (left_height > right_height) {
        return left_height + 1;
    } else {
        return right_height + 1;
    }
    //    return MAX(get_tree_height(tree_root->left_child), get_tree_height(tree_root->right_child)) + 1; 
}
Пример #5
0
void s_test_ins_tree_height(void) {
  int sizeOfElement = sizeof(int);
  Tree tree = new_tree(sizeOfElement, navigateItem, NULL, NULL, NULL);
  CU_ASSERT_TRUE(get_tree_height(tree) == 0);

  int obj = 10;

  tree_insert(&tree, &obj, NULL);

  CU_ASSERT_TRUE(get_tree_height(tree) == 1);

  if (tree != NULL) {
    destroy_tree(&tree); 
  }
}
Пример #6
0
void c_test_tree_delete(void) {
  
  int items = 2;
  int sizeOfElement = sizeof(struct complexThing);
  Tree tree = new_tree(sizeOfElement, navigateComplex, copyComplex, destroyComplex, NULL);
  
  for (int i = 1; i < items; i++) {
    Complex *c = malloc(sizeof(struct complexThing));

    c->int_regular = i;
    c->int_pointer = malloc(sizeof(int));
    *c->int_pointer = i+i;

    tree_insert(&tree, c, NULL);
     
    if (c != NULL) {
      if (c->int_pointer != NULL) {
	free(c->int_pointer);
      }
      free(c);
    }
  }
 

  for (int d = items - 1; d >= 0; d--) {
    tree_delete(&tree, &d, navigateSearchComplex);
  }

  CU_ASSERT_EQUAL(get_tree_height(tree), 0);

  if (tree != NULL) {
    destroy_tree(&tree); 
  }

}
Пример #7
0
void s_test_tree_balance(void) {

  int items = 500;

  int sizeOfElement = sizeof(int);
  Tree tree = new_tree(sizeOfElement, navigateItem, NULL, NULL, NULL);
  int b = 0;
  
  double d = 1.44;
  double f = 0.328;
  double g = log2(items+2);
  double res = (d*g) - f;

  for (int i = 0; i < items; i++) {
    b = i;
    tree_insert(&tree, &b, NULL);
    CU_ASSERT_TRUE(get_tree_height(tree) <= res);
  }

  //An AVL tree height should be strictly lower than 1.44log2(n+2)-0.328 where n = the number of items.
 
  //printTest(&tree, printInt);
  if (tree != NULL) {
    destroy_tree(&tree); 
  }

}
Пример #8
0
void c_test_tree_balance(void) {

  int items = 100;
  int sizeOfElement = sizeof(struct complexThing);
  Tree tree = new_tree(sizeOfElement, navigateComplex, copyComplex, destroyComplex, NULL);
  
  double d = 1.44;
  double f = 0.328;
  double g = log2(items+2);
  double res = (d*g) - f;

  for (int i = 1; i < items; i++) {
     Complex *c = malloc(sizeof(struct complexThing));

     c->int_regular = i;
     c->int_pointer = malloc(sizeof(int));
     *c->int_pointer = i+i;

     tree_insert(&tree, c, NULL);
     
       //An AVL tree height should be strictly lower than 1.44log2(n+2)-0.328 where n = the number of items.
     CU_ASSERT_TRUE(get_tree_height(tree) <= res);

     if (c != NULL) {
       if (c->int_pointer != NULL) {
	 free(c->int_pointer);
       }
       free(c);
     }
    }



  if (tree != NULL) {
    destroy_tree(&tree); 
  }

}
Пример #9
0
void s_test_tree_delete(void) {
  
  int items = 500;
  int sizeOfElement = sizeof(int);
  Tree tree = new_tree(sizeOfElement, navigateItem, NULL, NULL, NULL);
  //tree_insert(&tree, &find, NULL);
  
  for (int i = 1; i < items; i++) {
     int o = i;
     tree_insert(&tree, &o, NULL);
   }

  for (int d = items - 1; d >= 0; d--) {
    tree_delete(&tree, &d, NULL);
  }

  CU_ASSERT_EQUAL(get_tree_height(tree), 0);

  if (tree != NULL) {
    destroy_tree(&tree); 
  }

}
Пример #10
0
void testBSTree() {

    printf("\nNow is Create Binary tree with node size %d >>>>>>>>>>\n", ARRAY_SIZE);
    randomize_in_place(A, ARRAY_SIZE);
    //    randomize_maxnum(A, ARRAY_SIZE, ARRAY_SIZE);
    print_array(A, ARRAY_SIZE);

    startProfileTime();
    tree_t * tree = tree_create(A, ARRAY_SIZE);
    endProfileTime("Create Binary search tree ");

#if 0
    printf("\nPre order traverse:\n");
    tree_preorder_traverse(tree->root, my_treenode_key_traverse);

    printf("\nPost order traverse:\n");
    tree_postorder_traverse(tree->root, my_treenode_key_traverse);

    printf("\nIn order traverse:\n");
    tree_inorder_traverse(tree->root, my_treenode_key_traverse);
#endif

    int key = 50;
    startProfileTime();

    treenode_t * search_result = tree_search(tree->root, key);
    endProfileTime("Binary tree search");
    
    if (search_result != get_nil_node()) {
        printf("Found key:%d\n", key);
    } else {
        printf(" Not found key:%d\n", key);
    }
    
    tree_left_rotate(tree, search_result);
    tree_right_rotate(tree, search_result);

    traverse_no_recurise(tree->root, my_treenode_key_traverse);

    treenode_t * max, * min;
    max = tree_max(tree->root);
    min = tree_min(tree->root);
    printf("\nmax = %ld\n min = %ld\n", max->key, min->key);

    treenode_t * bigger = tree_successor(search_result);
    printf("successor = %ld\n", (bigger!=NULL) ? bigger->key : -1);
    treenode_t * smaller = tree_predecessor(search_result);
    printf("perdecessor = %ld\n", (smaller!=NULL) ? smaller->key : -1);
    
    //Test delete:
        treenode_t * deleted_node = RBTree_delete(tree, search_result);
        //    treenode_t * deleted_node = tree_delete(tree, search_result);
    if (deleted_node)
        printf("del %p, key=%ld from tree.\n", deleted_node, deleted_node->key);
    tree_inorder_traverse(tree->root, my_treenode_key_traverse);
    //    traverse_no_recurise(tree->root, my_treenode_key_traverse);
    
    int height = get_tree_height(tree->root);
    printf("\nget tree h = %d\n", height);
 
    tree_destroy(tree, NULL);
}
Пример #11
0
int compute_tree_bf(AVLTree tree)
{
    return get_tree_height(tree->left) - get_tree_height(tree->right);
}
Пример #12
0
int compute_tree_height(AVLTree tree)
{
    return get_max(get_tree_height(tree->left),
                   get_tree_height(tree->right)) + 1;
}
Пример #13
0
int mainTree(){
    int i;
	BinTree * tree = initBinTree();
	if(tree->size == 0){
		/*
	    insertAsRoot(tree,16);
		insertAsLC(10,root(tree));
		insertAsRC(25,root(tree));
		insertAsLC(19,root(tree)->rc);
		insertAsRC(28,root(tree)->rc);
		insertAsLC(5,root(tree)->lc);
		insertAsRC(11,root(tree)->lc);
		//insertNode(tree,3);
		*/
		/*insertNode(tree,16);
		insertNode(tree,10);
		insertNode(tree,25);
		insertNode(tree,19);
		insertNode(tree,28);
		insertNode(tree,5);
		insertNode(tree,11);
		insertNode(tree,4);
		insertNode(tree,33);
		insertNodeAVL(36,tree);
		insertNodeAVL(38,tree);
		insertNodeAVL(39,tree);
		insertNodeAVL(40,tree);
		insertNodeAVL(41,tree);
		*/
		/* 
		insertNodeAVL(3,tree);
		insertNodeAVL(5,tree);
		insertNodeAVL(11,tree);
		insertNodeAVL(16,tree);
		insertNodeAVL(19,tree);
		insertNodeAVL(25,tree);
		insertNodeAVL(28,tree);
		insertNodeAVL(33,tree);
		insertNodeAVL(36,tree);
		insertNodeAVL(39,tree);
		insertNodeAVL(41,tree);
		insertNodeAVL(43,tree);
		deleteBinNode(tree,28);
		deleteBinNode(tree,5);
		deleteBinNode(tree,25);
		deleteBinNode(tree,3);
		deleteBinNode(tree,33); */
		for(i = 1 ; i < 10 ; i++){
		   insertNodeAVL(i,tree);
		} 
	}
	if(tree->size!=0){
		printf("根节点:%d \n" , root(tree)->data);
	    printf("高度: %d\n",get_tree_height(root(tree)));
        printf("\n中序遍历---------------\n");
		travIn_R(root(tree));
		//printf("\n %d ",searchIn(root(tree),11)->data);
		//printf("\n %d ", getMax(root(tree))->data);
		//printf("\n %d ", getMin(root(tree))->data);
		printf("\n");
	}
    for(i = 1 ;i < 8 ; i++)
		deleteBinNode(tree,i);
		//deleteNodeAVL(tree , i);
	if(tree->size!=0){
		printf("根节点:%d \n" , root(tree)->data);
		printf("高度: %d\n",get_tree_height(root(tree)));
        printf("\n中序遍历---------------\n");
		travIn_R(root(tree));
	}
	/*
	if(tree->size == 0){
		insertAsRoot(tree,'A');
		insertAsLC('B',root(tree));
		insertAsRC('E',root(tree));
		insertAsRC('G',root(tree)->rc);
		insertAsLC('F',root(tree)->rc);
		insertAsLC('C',root(tree)->lc);
		insertAsRC('D',root(tree)->lc);
	}
	if(tree->size!=0){
	    printf("高度: %d\n",getTreeHeight(tree));
		printf("高度: %d\n",get_tree_height(root(tree)));
		printf("节点数目:%d\n",getBinNodeSize(root(tree)));
		printf("前序遍历---------------\n");
		travPre(root(tree));
		printf("\n");
		travPre_I1(root(tree));
		printf("\n");
		travPre_I2(root(tree));
		printf("\n中序遍历---------------\n");
		travIn_R(root(tree));
		printf("\n");
		travIn_I1(root(tree));
		printf("\n层次遍历---------------\n");
		traveLevel(root(tree));
		printf("\n叶子节点数目 %d \n ",getLeafNum(root(tree)));
		//printf("\n%c",search(root(tree),'C')->data);
	}  */
	return 0;
}