int isSum(struct node* root)
{
    int ls,rs;
    if(root==NULL||root->left==NULL&&root->right==NULL)
        return 1;
    ls=sum(root->left);
    rs=sum(root->right);
    if((root->data==ls+rs)&&isSum(root->left)&&isSum(root->right))
        return 1;
    return 0;
}
Esempio n. 2
0
int isSum(struct node *root)
{int ls,rs;
  if((root == NULL) ||(root->left==NULL && root->right==NULL))
    return 1;
  else
    {
      ls=sum(root->left);
      rs=sum(root->right);

      if((root->data == ls+rs)&&
	 isSum(root->left)&&
	  isSum(root->right))
	 {return 1;}
	 else
	   return 0;     
 

    }
}
int main()
{
    struct node *tr=newnode(26);
    tr->left=newnode(10);
    tr->right=newnode(3);
    tr->left->left=newnode(4);
    tr->left->right=newnode(6);
    tr->right->left=newnode(3);
    isSum(tr)?printf("follow.."):printf("not follow");
    return 0;
}
Esempio n. 4
0
int main(){
    int set[] = {1,7,4,2,9,12,13};
    std::cout << isSum(set,9,7) << std::endl;   
    for(int i = 0; i <= 7; i++){
        std::cout << (i>0?set[i-1]:0) << '\t';
        for(int j = 0; j <= 9; j++){
            std::cout << dp[i][j] << ' ';
        }
        std::cout << std::endl;
    }
}
int main(){
	int sum = 0, i = 2, limit = pow(9,5) * 5;
	std::vector<int> powvec;
	for (int i = 0; i < 10; i++){
		powvec.push_back(pow(i,5));
	}
	while (i < limit){
		if (isSum( i, powvec )) sum += i;
		i++;
	}
	std::cout<<sum<<std::endl;	
	return 0;
}
Esempio n. 6
0
int isSum(Node * head, int sum)
{
	int mysum, left, right;
	if(head)
	{
		if(!head->leftNode && !head->rightNode)
		{
			if(head->value==sum)
				return 1;
			else
				return 0;
		}
		if(head->leftNode)
			left = isSum(head->leftNode, sum - head->value);
		else
			left = 0;
		if(head->rightNode)
			right = isSum(head->rightNode, sum - head->value);
		else 
			right = 0;
		return left+right;
	}
	return 0;
}
Esempio n. 7
0
int main()
{
	int based_sum;
	char str_tree[501] = {'\0'};
	char temp;
	Node * head;

	while(scanf("%d", &based_sum)!=EOF)
	{
		int i=0, left=0, right=0;
		while(scanf("%c",&temp))
		{
			if(temp == '\n' || temp == '\t' || temp == ' '|| c==9 || c==10)
				continue;
			else
			{
				str_tree[i++] = temp;
				if(temp == '(') 
					left++;
				else if(temp == ')') 
					right++;
				if(left == right) 
					break;
			}
		}
		if(str_tree[1] == ')')
		{
			printf("no\n");
			continue;
		}
		creatTree(str_tree, 0, &head);
		// printTree(head, 0);
		if(isSum(head, based_sum))
			printf("yes\n");
		else
			printf("no\n");

		for(i=0; i<501 && str_tree[i]!='\0'; i++)
		{
			str_tree[i] = '\0';
		}
	}

	return 0;
}
Esempio n. 8
0
int main()
{
  int ans=-1;
  root=create(26);
  root->left=create(10);
  root->right=create(3);
  root->left->left=create(4);
  root->left->right=create(6);
  root->right->right=create(3);
  

  display(root);

  ans=isSum(root);
    if(ans==1)
      printf("Yes  sum tree\n");
    else
      printf("No\n");



  return 0;
}
Esempio n. 9
0
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;
}