C++解法:輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

題目描述
輸入兩棵二叉樹A,B,判斷B是不是A的子結構。(ps:我們約定空樹不是任意一個樹的子結構)

提交代碼:

class Solution {
public:
	bool is_same(TreeNode* pRoot1, TreeNode* pRoot2)
	{
		if (pRoot2==NULL)
		{
			return true;
		}
		if (pRoot1==NULL&&pRoot2!=NULL)
		{
			return false;
		}
		if (pRoot1->val!=pRoot2->val)
		{
			return false;
		}

		return is_same(pRoot1->left, pRoot2->left) && is_same(pRoot1->right, pRoot2->right);
	}

	bool is_sonTree(TreeNode* pRoot1, TreeNode* pRoot2)
	{

		if (pRoot1 == NULL&&pRoot2 != NULL)
		{
			return false;
		}

		if (pRoot2->val!=pRoot1->val)
		{
			return is_sonTree(pRoot1->left, pRoot2) || is_sonTree(pRoot1->right, pRoot2);
		}
		return is_same(pRoot1, pRoot2)||is_sonTree(pRoot1->left, pRoot2) || is_sonTree(pRoot1->right, pRoot2);
	}

	bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
	{
		bool b;
		if (pRoot1==NULL||pRoot2==NULL)
		{
			return false;
		}
		b = is_sonTree(pRoot1,  pRoot2);
		return b;
	}
};

測試代碼:

int main()
{
	Solution *s = new Solution();
	TreeNode *t1 = new TreeNode(8);
	TreeNode *t2 = new TreeNode(8);
	TreeNode *t3 = new TreeNode(7);
	TreeNode *t4 = new TreeNode(9);
	TreeNode *t5 = new TreeNode(2);
	TreeNode *t6 = new TreeNode(4);
	TreeNode *t7 = new TreeNode(7);
	t1->left = t2; t1->right = t3; t2->left = t4; t2->right = t5; t3->left = t6; t3->right = t7;

	TreeNode *tt1 = new TreeNode(8);
	TreeNode *tt2 = new TreeNode(9);
	TreeNode *tt3 = new TreeNode(2);
	tt1->left = tt2; tt1->right == tt3;

	bool out_tree =s->HasSubtree(t1,tt1);
	cout << out_tree << endl;
	system("pause");
	return 0;
}

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章