剑指offer-面试题26-树的子结构-二叉树

/*
题目:
	输入两棵二叉树A和B,判断B是不是A的子树。
*/
/*
思路:
	1、注意浮点数大小的判断。
	2、判断树A的某个节点是否和树B的根节点是否相同,
		若相同,则判断以A该节点为根节点是否包含树B;
		若不包含,判断A的左子树是否包含树B;
		若不包含,判断A的右子树是否包含树B。
	3、以A的某个节点为根,判断是否对应B的根节点,
		判断A的左子树和B的左子树的相等性;判断A的右子树和B的右子树的相等性。	
*/
#include <iostream>
#include<cstdlib>

using namespace std;

struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};

bool equals(double num1, double num2){
    if(num1-num2 > -0.0000001 && num1-num2 < 0.0000001){
        return true;
    }
    return false;
}

bool doesHasSubtree(TreeNode* pNode1,TreeNode* pNode2){
    if(pNode2 == nullptr) return true;
    if(pNode1 == nullptr) return false;
    if(equals(pNode1->val,pNode2->val)){
        return doesHasSubtree(pNode1->left,pNode2->left) && doesHasSubtree(pNode1->right,pNode2->right);
    }
    return false;
}

bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
    bool result = false;
    if(pRoot1 != nullptr && pRoot2 != nullptr){
        if(equals(pRoot1->val,pRoot2->val)){
            result = doesHasSubtree(pRoot1,pRoot2);
        }
        if(!result){
            result = HasSubtree(pRoot1->left,pRoot2);
        }
        if(!result){
            result = HasSubtree(pRoot1->right,pRoot2);
        }

    }
    return result;
}

int main()
{
    TreeNode *node7 = new TreeNode(7);
    TreeNode *node6 = new TreeNode(4);
    TreeNode *node5 = new TreeNode(3);
    TreeNode *node4 = new TreeNode(9);
    TreeNode *node3 = new TreeNode(7);
    TreeNode *node2 = new TreeNode(8);
    TreeNode *node1 = new TreeNode(8);

    node1->left = node2;
    node1->right = node3;
    node2->left = node4;
    node2->right = node5;
    node5->left = node6;
    node5->right =node7;

    TreeNode *node31 = new TreeNode(2);
    TreeNode *node21 = new TreeNode(9);
    TreeNode *node11 = new TreeNode(8);

    node11->left = node21;
    node11->right = node31;

    cout<<HasSubtree(node1,node11)<<endl;
    
    return 0;
}

   

原文地址:https://www.cnblogs.com/buaaZhhx/p/11918956.html