您的位置:首页 > Web前端

《剑指offer》树的子结构

2015-09-11 13:15 405 查看



【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】





题目链接:http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述

输入两颗二叉树A,B,判断B是不是A的子结构。

思路

首先我们要在A中找到一个节点与B的根结点相等的位置,然后从这个结点开始查找其左结点和右结点,并按照之前的方法进行判断,这就是一个递归判断的过程。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution
{
	public:
		bool HasSubtree(TreeNode* root1, TreeNode* root2)
		{
			bool result = false;
			if(root1!=nullptr && root2!=nullptr)
			{
				if(root1->val == root2->val)
					result = Tree2InTree1(root1,root2);
				if(!result)
					result = HasSubtree(root1->left,root2);
				if(!result)
					result = HasSubtree(root1->right,root2);
			}
			return result;
		}
		bool Tree2InTree1(TreeNode* root1, TreeNode* root2)
		{
			if(root2==nullptr)
				return true;
			if(root1==nullptr)
				return false;
			if(root1->val != root2->val)
				return false;
			return Tree2InTree1(root1->left,root2->left) && Tree2InTree1(root1->right,root2->right);
		}
};


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: