Exemple #1
0
void levelorder(list *node,int level){
 if (node == NULL)
        return;
    if (level == 1)
        printf("%d ", node->item);
    else if (level > 1)
    {
        levelorder(node->left, level-1);
        levelorder(node->right, level-1);
    }
}
Exemple #2
0
int main(){
int i ;
list *root = insert(1) ;
root->left   = insert(2);
root->right   = insert(3);
root->left->left  = insert(4);
root->left->right  = insert(5);

int h = height(root) ;
for(i=1;i<h;i++){
    levelorder(root,i) ;printf("\n") ;
}
levelorder(root,h) ;
}
Exemple #3
0
void CBinaryTree<type>::LevelorderTraversal(void)
{
    CQueue<nodeType<type>*> queue;
    std::cout<<"Levelorder: ";
    levelorder(m_root,&queue);
    std::cout<<std::endl;
}
Exemple #4
0
int main()
{
int x = 1;
Tree<int>* tree = new Tree<int>(NULL,x,NULL);
x = 2;
Tree<int>* r = new Tree<int>(NULL,x,NULL);
x = 3 ;
Tree<int>* l = new Tree<int>(NULL,x,NULL);
x = 4 ;
Tree<int>* ll = new Tree<int>(NULL,x,NULL);
x = 5;
Tree<int>* rl = new Tree<int>(NULL,x,NULL);

x = 6;
Tree<int>* lr = new Tree<int>(NULL,x,NULL);
x = 7;
Tree<int>* rr = new Tree<int>(NULL,x,NULL);

r->setLeftTree(rl);
l->setLeftTree(ll);

r->setRightTree(rr);
l->setRightTree(lr);
tree->setRightTree(r);
tree->setLeftTree(l);

levelorder(tree);

deleteTree(tree);

return 0;
}
void		btree_apply_by_level(t_btree *root, void (*applyf)(void *item,
		int current_level, int is_first_elem))
{
	int		i;
	int		u;

	i = 0;
	u = 0;
	levelorder(root, applyf, &i, &u);
}
Exemple #6
0
//根据先序和中序遍历结果构建树
void bulid_by_preorder_inorder(){
	int apreoder[] = { 1, 2, 4, 3, 5, 6};
	int ainoder[] = { 4, 2, 1, 5, 3, 6};
	int len = sizeof(apreoder)/sizeof(int);
	vector<int> preoder = to_vector(apreoder,len);
	vector<int> inoder = to_vector(ainoder,len);
	treenode* root = bulid_by_preorder_inorder(preoder,inoder,0,len-1,0,len-1);
	cout<<root->data<<endl;
	levelorder(root);
}				
Exemple #7
0
void testcase()
{
    BinaryNode<int> *proot=NULL;
    proot=createTree(proot);

    std::cout<<"前序遍历:"<<std::endl;
    preorder(proot,visitNode<int>);
    std::cout<<std::endl;

    std::cout<<"前序遍历:"<<std::endl;
    preorderNotRecursive(proot,visitNode<int>);
    std::cout<<std::endl;

    std::cout<<"中序遍历:"<<std::endl;
    inorder(proot,visitNode<int>);
    std::cout<<std::endl;

    std::cout<<"中序遍历:"<<std::endl;
    inorderNotRecursive(proot,visitNode<int>);
    std::cout<<std::endl;

    std::cout<<"后序遍历:"<<std::endl;
    postorder(proot,visitNode<int>);
    std::cout<<std::endl;

    std::cout<<"后序遍历:"<<std::endl;
    postorderNotRecursive(proot,visitNode<int>);
    std::cout<<std::endl;

    std::cout<<"层次遍历:"<<std::endl;
    levelorder(proot,visitNode<int>);
    std::cout<<std::endl;

    //delete
    //std::vector<BinaryNode<int>*> v;
    levelorder(proot,destroyNode<int>);//std::back_inserter<decltype(proot)>(v));
    std::for_each(v.begin(),v.end(),[](BinaryNode<int> *p){
            delete p;
            });
}
Exemple #8
0
int main()
{
int x = 1;
Tree<int>* tree = new Tree<int>(NULL,x,NULL);
x = 2;
Tree<int>* r = new Tree<int>(NULL,x,NULL);
x = 3 ;
Tree<int>* l = new Tree<int>(NULL,x,NULL);
x = 4 ;
Tree<int>* ll = new Tree<int>(NULL,x,NULL);
x = 5;
Tree<int>* rl = new Tree<int>(NULL,x,NULL);

x = 6;
Tree<int>* lr = new Tree<int>(NULL,x,NULL);
x = 7;
Tree<int>* rr = new Tree<int>(NULL,x,NULL);

r->setLeftTree(rl);
l->setLeftTree(ll);

r->setRightTree(rr);
l->setRightTree(lr);
tree->setRightTree(r);
tree->setLeftTree(l);

Tree<int>* newTree = NULL;
assign(tree,newTree);

cout << "Level Order Original" << endl;
levelorder(tree);

cout << "Level Order Duplicate" << endl;
levelorder(newTree);

return 0;
}
Exemple #9
0
int main(void)
{
	struct node* root = NULL;
	//struct node* root2 = NULL;
	struct node *find = NULL;

	char str[1024];

	root = insert(root, 10);
	root = insert(root, 15);
	root = insert(root, 9);
	root = insert(root, 8);
	root = insert(root, 13);
	root = insert(root, 7);
	root = insert(root, 5);
	root = insert(root, 18);
	root = insert(root, 22);
	root = insert(root, 3);
	root = insert(root, 4);
	root = insert(root, 2);
	root = insert(root, 1);
	print_ascii_tree(root);
	find = search(root, 18);
	print_ascii_tree(root);
	find = search(root, 22);
	printf("\n\n\nDATA found is %d\n", find->data);
	find = min_node(root);
	printf("Min in this tree is %d\n", find->data);
	find = max_node(root);
	printf("Mx in this tree is %d\n", find->data);
	print_ascii_tree(root);
	preorder(root);
	printf("\n");
	inorder(root);
	printf("\n");
	postorder(root);
	printf("\n");
	printf("DEPTH is %d\n", depth(root));
	tree_to_string(root, str);
	printf("The STR generated is %s\n", str);
	//string_to_tree(&root2, str);
	//print_ascii_tree(root2);
	printf("COUNT is %d\n",nodes(root));
	bool res = hassum(root, 45);
	printf("Bool val is %d\n", (int)res);
	levelorder(root);
	return 0;
}
Exemple #10
0
int _tmain(int argc, _TCHAR* argv[])
{
	root=insert(20);
	root->left=insert(13);
	root->right=insert(40);
	root->left->left=insert(3);
	root->left->right=NULL;
	root->right->left=NULL;
	root->right->right=insert(45);
	root->left->left->left=NULL;
	root->left->left->right=insert(8);
	root->right->right->left=insert(43);
	root->right->right->right=NULL;

	//root->left->left->left=NULL;
	//root->left->left->right=NULL;
	///*root->left->right->left=NULL;*/
	//root->left->right->right=insert(8);
	///*root->right->left->left=NULL;*/
	//printf("the preorder is\n");
	///*root->right->left->right=NULL;*/
	//root->right->right->left=insert(43);
	///*root->right->right->right=NULL;*/
	display(root);
	/*int pre[]={20,10,3,12,40,35,50};
	int in[]={3,10,12,20,35,40,50};
	constructbin(in,pre,0,6);*/
	/*printf("the postorder is\n");
	post(root);*/
	/*printf("\n modified tree is\n");
	node *res=change(root);
	display(res);*/
	printf("nodeval\tnoofchild\n");
	printf("---------------------------\n");
	noofchild(root);
	displaywithchild(root);
	printf("the level ordering of the given bst is\n");
	levelorder(root);
	return 0;
}
Exemple #11
0
int main(int argc, char** argv) {

    BTreeNode* root = create();

    printf("preorder :\n");
    preorder(root);

    printf("\ninorder  :\n");
    inorder(root);

    printf("\npostorder:\n");
    postorder(root);
    printf("\n");

    printf("\nleverorder:\n");
    levelorder(root);
    printf("\n");
    
    printf("the number of leaves is : %d \n",getLeavesNum(root));
    printf("the depth of the binary tree is :%d\n",getDepth(root));
    return (EXIT_SUCCESS);
}
int main()
{

#if 0
        int a[] = {2, 4, 1, 8, 3, 5, 9, 6, 7};
        tree_t root = NULL;

        for(int i = 0; i < 9; ++i)
        {
                root = insert(root,a[i]);
        }

        display(root);

        printf("----------------------\n");
#endif
#if 0
        printf("In-order traversal \n");
        display(root);

        printf("No of nodes: %d\n", count(root));

        printf("----------------------\n");
        printf("No of leaf nodes: %d\n",count_leaf(root));

        printf("----------------------\n");
        printf("Pre-order traversal\n");
        post_traversal(root);
        printf("----------------------\n");
        printf("Post-order traversal\n");
        pre_traversal(root);
        printf("----------------------\n");

        printf("Height of the tree is: %d\n", height(root));
        printf("Least value in tree is: %d\n", least_of_tree(root));
        printf("Max value of tree is: %d\n", max_of_tree(root));

        int height_ = height(root);
        int vertical_sum[10000];
        for(int i = 0; i < 10000; ++i)
        {
                vertical_sum[i] = 0;
        }
        /*
                I assumed Vertical sum for root is 1... :P if there are more no of nodes on the
                left subtree of the root..they we cant implement this using arrays in c..as negative indices is not possible
        */

        verticalSumArray(root,vertical_sum,1);
        for(int i = 0;vertical_sum[i] != 0 ; ++i)
        {
                printf("%d : %d \n",i,vertical_sum[i]);
        }

        // tree_t mirrored_root = mirror_tree(root);
        printf("----------------------\n");
        // display(mirrored_root);
        //printf("%d\n", RLMirrors(root));
        //inorder(root);

        tree_t largest = largestSumSubtree(root);
        printf("%d\n",largest -> key);

        int key = 1;
        if(search(root,key) != NULL)
        {
                printf("%d is present\n",key);
        }
        else
        {
                printf("%d is absent\n",key);
        }

        iterativeInorder(root);

        printf("----------------------\n");

        iterativePreorder(root);


        printf("----------------------\n");
        iterativePostorder(root);

        levelorder(root);

        int height = 0;
        printf("the diameter of the tree: %d\n",diameter(root));

        int key = 9;
        printAncestorsI(root,key);

        int k = 3;
        printKdistance(root,k);

        int sum = 36;
        if(hasSumPath(root,sum) == 1)
        {
                printf("Yes\n");
        }
        else
        {
                printf("No\n");
        }

        root  = getNode(10);
        root -> llink = getNode(8);
        root -> rlink = getNode(2);
        root -> llink -> llink = getNode(3);
        root -> llink -> rlink = getNode(5);
        root -> rlink ->rlink = getNode(2);

        display(root);
        printf("----------------------\n");
        if(isSum(root))
        {
                printf("Yes\n");
        }
        else
        {
                printf("No\n");
        }

        root  = getNode(20);
        root -> llink = getNode(8);
        root -> rlink = getNode(22);
        root -> llink -> llink = getNode(4);
        root -> llink -> rlink = getNode(12);
        root -> llink -> rlink -> rlink = getNode(14);
        root -> llink -> rlink -> llink = getNode(10);

        int n1 = 4;
        int n2 = 14;
        printf("Least common ancestor of %d & %d is %d \n", n1,n2,lowestCommonAncestor(root,n1,n2));
        printf("\n");
#endif
        // printPaths(root);
#if 0
        int num = 4;
        printf("The no of bst for %d keys is %d\n", num,countTrees(num));i
#endif
#if 0
        root = getNode(20);
        root -> llink = getNode(8);
        root -> rlink = getNode(22);
        root -> llink -> llink = getNode(4);
        root -> llink -> rlink = getNode(12);
        root -> llink -> rlink -> llink = getNode(10);
        root -> llink -> rlink -> rlink = getNode(14);

        tree_t successor = inorderSuccessor(root,root -> llink);
        if(successor != NULL)
        {
                printf("thei inorder successor is %d\n",successor -> key);
        }
#endif
#if 0
        root = getNode(20);
        root -> llink = getNode(8);
        root -> rlink = getNode(22);
        root -> llink -> llink = getNode(100);
        if(checkAllLeavesSameLevel(root) == 1)
        {
                printf("All the leaves are in the same level\n");
        }
#endif
#if 0
        display(root);
        printf("-------------------------------------\n");
        replaceNodeWithSum(root,0);
        display(root);
int getSum(tree_t root)
{
        if(root == NULL)
        {
                return 0;
        }
        else
        {
                return root -> key + getSum(root -> rlink);
        }
}
#endif
        // printf("%d\n",countTrees(3));
#if 0
        root = getNode(10);
        root->llink = getNode(20);
        root->rlink = getNode(30);



        if(isBalanced(root) == 1)
        {
                printf("The tree is balanced\n");
        }
        else
        {
                printf("Ther tree is unbalanced\n");
        }
#endif
#if 0
        tree_t root = NULL;
        int array[] = {1,2,3,4,5,6,7,8,9};
        int n = 9;
        root = createMinimalBST(root,array,n);
        display(root);
#endif
//        tree_t root = NULL;
#if 0
        root = getNode(20);
        root -> llink = getNode(8);
        root -> rlink = getNode(22);
        root -> llink -> llink = getNode(4);
        root -> llink -> rlink = getNode(12);
        root -> llink -> rlink -> llink = getNode(10);
        root -> llink -> rlink -> rlink = getNode(14);

        // printPathWithSum(root,40);

        // levelorderRecursive(root);
        // rightView(root);
#endif
#if 0
        int inorder[] = {4, 2, 5, 1, 6, 3};
        int preorder[] = {1, 2, 4, 5, 3, 6};

        int n = 6;
        // int preIndex = 0;
        // root = buildTreeWithInorderAndPreOrder(inorder,preorder,0,n - 1,&preIndex);
        // display(root);

        int index = 0;
        printPostOrder(inorder,preorder,0,n - 1,&index);
#endif
#if 0
        /*
                        10
                    -2      7
                 8      -4

        */
        tree_t root = NULL;
        root = getNode(10);
        root->llink = getNode(-2);
        root->rlink = getNode(7);
        root->llink->llink = getNode(8);
        root->llink->rlink = getNode(-4);
 //       printf("Sum: %d\n",maxSumPath(root));

        pre_traversal(root);
        printf("----------------------------------");
        display(root);
#endif

        return 0;
}
int main(int argc, char *argv[])
{
    std::cerr << "reading graph...";
    Eigen::SparseMatrix<double> g = readGraph(std::string(argv[1]));
    std::cerr << "done." << std::endl;

#if DEBUG
    std::cout << "Adjacency Matrix" << std::endl;
    std::cout << g << std::endl;
#endif

    std::vector<C_tuple*> C;
    std::cerr << "getting C vector...";
    getC(g, C);

    std::cerr << "sorting...";
    __gnu_parallel::sort(C.begin(), C.end(), C_tuple_compare);
    //std::sort(C.begin(), C.end(), C_tuple_compare);
    std::cerr << "done." << std::endl;

#if DEBUG
    for (uint64_t i = 0; i < C.size(); i++)
    {
        std::cout << C[i]->i << ", " << C[i]->j << ", " << C[i]->value<< std::endl;
    }
#endif

    std::cerr << "creating T...";
    node* root = createT(g, C);
    std::cerr << "done." << std::endl;

#if DEBUG
    //postorder(printNode, root);
    levelorder(printNode, root);

    node* left = root->leftChild;
    while (left->leftChild) left = left->leftChild;

    node* right = root->rightChild;
    while (right->rightChild) right = right->rightChild;

    node* lca = LCA(left, right);
    std::cout << "lca for " << left->vertex << ", " << right->vertex << ": " << lca->vertex << std::endl;

    left = right->parent->leftChild;
    lca = LCA(left, right);
    std::cout << "lca for " << left->vertex << ", " << right->vertex << ": " << lca->vertex << std::endl;
#endif

    std::cerr << "counting vertices and edges...";
    countVerticesAndEdges(g, root);
    std::cerr << "done." << std::endl;
    std::cerr << "computing density...";
    computeDensity(root);
    std::cerr << "done." << std::endl;

#if DEBUG
    std::cout << "\nPrinting after the countVerticesAndEdges\n" << std::endl;
    postorder(printNode, root);
#endif

    std::cerr << "extracting subgraphs...";
    extractSubgraphs(root, 0.75);
    std::cerr << "done." << std::endl;
}
int main(int argc, char *argv[]){

  element_type test_array[20];
  int i;
  BTREE T = init_tree();
  TREE_NODE p;
  int height;
 
  
  for(i=0; i<20; i++){
    test_array[i]= random(200);
    printf("%d, ", test_array[i]);
  }
  printf("\n");
  T =  creat_tree(test_array, sizeof(test_array)/sizeof(test_array[0]), T);
  height = height_recursive(T);
  printf("height is %d\n", height);

  printf("preorder:\n");
  preorder_recursive(T); 
  printf("\n");

  printf("inoder:\n");
  inorder_recursive(T);
  printf("\n");

  printf("postorder:\n");
  postorder_recursive(T);
  printf("\n");

  printf("preorder nonrec:\n");
  preorder_norecursive(T);
  printf("\n");

  printf("inorder nonrec:\n");
  inorder_norecursive(T);
  printf("\n");

  printf("postorder nonrec:\n");
  postorder_norcursive(T);
  printf("\n");
 
  printf("levelorder:\n");
  levelorder(T);
  printf("\n");

  printf("print leaf recursive:\n");
  output_leaf_recursive(T);
  printf("\n"); 

  printf("print leaf norecursive\n");
  output_leaf_norecursive(T);
  printf("\n");

  printf("find an element\n");
  if(find_tree(177, T) == NULL)
    printf("no such element\n");
  else
    preorder_recursive(find_tree(177, T));
  printf("\n");

  printf("min node\n");
  visit(find_min(T)->element);
  printf("\n");
  
  printf("max node\n");
  visit(find_max(T)->element);
  printf("\n");

  printf("delet:\n");
  tree_delete(115, T);
  preorder_recursive(T);
  printf("\n");
  
  printf("exchange tree:\n");
  exchange_recursive(T);
  preorder_recursive(T);
  printf("\n");

  printf("exchange tree norecursive:\n");
  exchange_norecursive(T);
  preorder_recursive(T);
  printf("\n");


  free_tree(T);
 
  return 0;
}