bool isSubTree(node *T, node *S){
	if(T == NULL)
		return false;
	if(T->data == S->data && isSimilar(T, S))
		return true;
	else{
		return isSubTree(T->left, S) || isSubTree(T->right, S);
	}
}
Exemplo n.º 2
0
 bool isSubTree(TreeNode *node1, TreeNode *node2)
 {
     //若B是空,则无论A是否为空,B都是A的子结构,空树是任何树的子结构
     if (node2 == NULL)
         return true;
     if (node1 == NULL)
         return false;
     //若非空,则当结点值相同,并且左右子树都满足子结构条件时,B是A的子结构
     if (node1->val == node2->val)
         return isSubTree(node1->left, node2->left) && isSubTree(node1->right, node2->right);
     else //结点值不同,肯定不是子结构
         return false;
 }
Exemplo n.º 3
0
/*
判断pTree2是否是与pTree1有共同的根节点的pTree1子树
*/
bool isSubTree(BTNode *pTree1,int index1,BTNode *pTree2,int index2)
{
	//前两个if语句不能颠倒,不然当pTree1和pTree2相同时,会误判为false
	if(index2 == -1)
		return true;
	if(index1 == -1)
		return false;
	if(pTree1[index1].data != pTree2[index2].data)
		return false;
	else
		return isSubTree(pTree1,pTree1[index1].lchild,pTree2,pTree2[index2].lchild) &&
			   isSubTree(pTree1,pTree1[index1].rchild,pTree2,pTree2[index2].rchild);
}
Exemplo n.º 4
0
// check whether BST s is BST t's subtree.
bool isSubTree(Node *t, Node *s)   
{
    if (t==NULL) 
        return false;

    if (s==NULL)
        return true;

    if (t->data == s->data)
        return isSameTree(t,s);
    
    if (t->data < s->data) {
        return isSubTree(t->right, s);
    }

    if (t->data > s->data) {
        return isSubTree(t->left, s);
    }
}
Exemplo n.º 5
0
bool isSubTree(BTreeNode *tree1, BTreeNode *tree2) {
  // find a node in tree1 with the same value as the root of tree2 ; 
  bool isASubTree = false; 

  if(NULL != tree1 && NULL != tree2) {
    if(rootVal == node->val) {
      isASubTree = testMatch(node, tree2); 
    }

    if(!isASubTree) {
      isASubTree = isSubTree(node->left, tree2);  
    }

    if(!isASubTree) {
      isASubTree = isSubTree(node->right, tree2); 
    }
  }

  return isASubTree; 
}
Exemplo n.º 6
0
/// Get the current size of the <index> child item
vec2 UIComponentTreeView::getItemSize(int index)
{
	if(isSubTree(index))
	{
		// This item is an arbitrarily complex tree, need to get that tree header + spacing + each item size
		UIView* subTreeContainer = mParent->getChild(index)->getChild(1);
		UIComponentTreeView* subTree = mParent->getChild(index)->getChild(1)->getComponent<UIComponentTreeView>();


		// A subtree item has size of the header + spacing + container of items
		return subTree->getSize() + vec2(0.f, mLineHeight + mSpacing);
	}
	else
	{
		//Log("simple item");

		// This item is a individual "file" and is only a fixed height
		return vec2(mParent->getChild(index)->getSize().x, mLineHeight);
	}
}
Exemplo n.º 7
0
/*
判断pTree1是否包含pTree2
*/
bool isContainTree(BTNode *pTree1,int index1,BTNode *pTree2,int index2)
{
	if(pTree1==NULL || pTree2==NULL)
		return false;
	if(index1==-1 || index2==-1)
		return false;

	bool result = false;
	if(pTree1[index1].data == pTree2[index2].data)
		result = isSubTree(pTree1,index1,pTree2,index2);

	//如果pTree1[index1].lchild为-1,下次递归时会通过index1==-1的判断返回false,
	//因此这里不需要再加上pTree1[index1].lchild!=-1的判断条件
	if(!result)
		result = isContainTree(pTree1,pTree1[index1].lchild,pTree2,index2);
	if(!result)
		result = isContainTree(pTree1,pTree1[index1].rchild,pTree2,index2);

	return result;
}
int main(){
	/* Construct the following tree
              26
            /   \
          10     3
        /    \     \
      4      6      3
       \
        30
    */
    struct node *T        = newNode(26);
    T->right              = newNode(3);
    T->right->right       = newNode(3);
    T->left               = newNode(10);
    T->left->left         = newNode(4);
    T->left->left->right  = newNode(30);
    T->left->right        = newNode(6);

    /* Construct the following tree
          10
        /    \
      4      6
       \
        30
    */
    struct node *S    = newNode(10);
    S->right          = newNode(6);
    S->left           = newNode(4);
    S->left->right    = newNode(30);


    if (isSubTree(T, S))
        printf("Tree S is subtree of tree T");
    else
        printf("Tree S is not a subtree of tree T");
        
	return 0;
}
Exemplo n.º 9
0
void TEST_subtree()
{
    std::cout << "TEST whether BST s is BST t's subtree.\n";

    int t[] = {1,2,3,4,5,6,7,8,9,10};
    int len_t = sizeof(t)/sizeof(t[0]);

    int s[] = {1,2,3,4};
    int len_s = sizeof(s)/sizeof(s[0]);

    BST bst_t = BST(t, len_t);
    std::cout << "Tree t: \n";
    bst_t.printPretty();

    BST bst_s = BST(s, len_s);
    std::cout << "Tree s: \n";
    bst_s.printPretty();

    if ( isSubTree(bst_t.getRoot(), bst_s.getRoot()) ) {
        std::cout << "Tree s is Tree t's subtree.\n";
    } else {
        std::cout << "Tree s is NOT Tree t's subtree.\n";
    }
}
Exemplo n.º 10
0
 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
 {
     if (pRoot1 == NULL || pRoot2 == NULL)
         return false;
     return isSubTree(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2);
 }