Esempio n. 1
0
int
main()
{
	struct searchTree * t = initTree();

   
	struct searchTree *root = t = treeInsert(t , 3);
	treeInsert(t , 8);
	struct searchTree * x = treeInsert(t , 4);
	struct searchTree * y = treeInsert(t , 14);
	treeInsert(t , 9);
	treeInsert(t , 2);
	treeInsert(t , 0);

	treeWalk(t);
	treeDelete(x);
	treeWalk(root);
	treeDelete(y);
	treeWalk(root);

	printf("\nmax = %d min = %d \n", treeMax(t) -> k, treeMin(t) -> k);
	
	if(treeSearch(t, 3) != NULL)
		printf("found\n");
	
	printf("%d\n",t  -> k); 
	t = treeSuccessor(t);
	printf("%d\n",t  -> k); 
	t = treePredecessor(t);
	printf("%d\n",t  -> k); 
}
void treeWalk(TreeNode* root, TreeNode*& prv, TreeNode*& first, TreeNode*& second) {
	//geeksforgeeks上面有相同的一个题目,可以参考,思路一样!,D盘:Tree 中有
	//注意参数传递的是指针的引用,如果要改变指针内容,那么需要传入一个二级指针,或一个引用
	if(root==NULL) return; 
	treeWalk(root->left,prv,first,second); 
	if((prv!=NULL)&&(prv->val>root->val)){ 
		if(first==NULL) 
			first=prv; 
		second=root; 
	}
	prv=root; 
	treeWalk(root->right,prv,first,second); 
}
void recoverTree(TreeNode *root) {
	TreeNode* first=NULL;
	TreeNode* second=NULL; 
	TreeNode* prv=NULL;
	treeWalk(root,prv,first,second);
	swap(first->val,second->val); 
}
Esempio n. 4
0
int
main()
{
	struct rbTree* t = treeInit();
   
	struct rbTree *root = t = rbTreeInsert(t , 3);
	rbTreeInsert(t , 8);
	struct rbTree * x = rbTreeInsert(t , 4);
	struct rbTree * y = rbTreeInsert(t , 14);
	rbTreeInsert(t , 9);
	rbTreeInsert(t , 2);
	rbTreeInsert(t , 0);
	treeWalk(t);

//	treeWalk(t);
//	treeDelete(x);
//	treeWalk(root);
//	treeDelete(y);
//	treeWalk(root);

//	printf("\nmax = %d min = %d \n", treeMax(t) -> k, treeMin(t) -> k);
	
//	if(treeSearch(t, 3) != NULL)
//		printf("found\n");
	
//	printf("%d\n",t  -> k); 
//	t = treeSuccessor(t);
//	printf("%d\n",t  -> k); 
//	t = treePredecessor(t);
//	printf("%d\n",t  -> k); 
}
Esempio n. 5
0
File: svg.c Progetto: Melab/gvmt
static Shape treeWalk(Node p) {
    int i, min_len, max_len;
    int sep, half_sep, offset;
    Shape shape;
    if (p->kids[1]) {
        Shape shape0 = treeWalk(p->kids[0]);
        Shape shape1 = treeWalk(p->kids[1]);
        Shape deeper;
        min_len = min(shape0->length, shape1->length);
        sep = 0;
        for (i = 0; i < min_len; i++) {
            sep = max(sep, shape0->items[i].right + shape1->items[i].left);
        }            
        half_sep = sep / 2;
        max_len = max(shape0->length, shape1->length);
        shape = new_shape(max_len + 1);
        for (i = 0; i < min_len; i++) {
            shape->items[i + 1].left = shape0->items[i].left + half_sep;
            shape->items[i + 1].right = shape1->items[i].right + half_sep;
        }
        if (shape0->length > shape1->length) {
            deeper = shape0;
            offset = -half_sep;
        } else {
            deeper = shape1;
            offset = half_sep;
        }
        for (i = min_len; i < max_len; i++) {
            shape->items[i + 1].left = deeper->items[i].left - offset;
            shape->items[i + 1].right = deeper->items[i].right + offset;
        }
        p->kids[0]->x.centre = -half_sep;
        p->kids[1]->x.centre = half_sep;
    } else if (p->kids[0]) {
        Shape kid_shape = treeWalk(p->kids[0]);
        shape = new_shape(kid_shape->length + 1);
        for (i = 0; i < kid_shape->length; i++) {
            shape->items[i + 1] = kid_shape->items[i];
        }
        p->kids[0]->x.centre = 0;
    } else {
        shape = new_shape(1);
    } 
    shape->items[0].left = X_SCALE;
    shape->items[0].right = X_SCALE;
    return shape;
}
Esempio n. 6
0
  JNIEXPORT jint JNICALL Java_edu_berkeley_bid_CUMACH_treeWalk
  (JNIEnv *env, jobject obj, jobject jfdata, jobject jinodes, jobject jfnodes, jobject jitrees, jobject jftrees, jobject jvtrees, jobject jctrees,
   jint nrows, jint ncols, jint ntrees, jint nnodes, jint getcat, jint nbits, jint nlevels)
  {
    float *fdata = (float*)getPointer(env, jfdata);
    int *inodes = (int*)getPointer(env, jinodes);
    float *fnodes = (float*)getPointer(env, jfnodes);
    int *itrees = (int*)getPointer(env, jitrees);
    int *ftrees = (int*)getPointer(env, jftrees);
    int *vtrees = (int*)getPointer(env, jvtrees);
    float *ctrees = (float*)getPointer(env, jctrees);

    return treeWalk(fdata, inodes, fnodes, itrees, ftrees, vtrees, ctrees, nrows, ncols, ntrees, nnodes, getcat, nbits, nlevels);  
  }
Esempio n. 7
0
File: svg.c Progetto: Melab/gvmt
static int doTree(Node p, int y) {
    Shape shape = treeWalk(p);
    int i, centre;
    int left = 0;
    int right = 0;
    p->x.centre = 0;
    for (i = 0; i < shape->length; i++) {
        left = max(left, shape->items[i].left);   
        right = max(right, shape->items[i].right);   
    }
    centre = (left - right)/2;
    drawLines(p, centre, y);
    drawNodes(p, centre, y);
    return y + shape->length * Y_SCALE + Y_SPACING;
}