判断一个二叉树是不是另一个二叉树的子结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao5502169/article/details/88977013

连接
很有意思的一个题目。竟然没有一次性通过。发现自己的代码还是有点问题。。
思路很容易想到:遍历第一个二叉树,找到与第二个二叉树的根节点相同的点,再从这个点开始判断。所以需要写一个遍历函数进行对比。
有个小坑点,在代码注释处。
代码如下:

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    bool Tree1HaveTree2(TreeNode *L,TreeNode *R){
        if(R == NULL)    return true;
        if(R != NULL && L == NULL)    return false;
        if(L->val == R->val)
            return Tree1HaveTree2(L->left,R->left)&&Tree1HaveTree2(L->right,R->right);
        else
            return false;
    }
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        //这里原本感觉是true,不过没过,改成false反而过了。。
        if(pRoot2 == NULL)
            return false;
        if(pRoot1 == NULL) 
            return false;
        //这里注意不要把Tree1HaveTree2 return出去。这样就不进行后面的判断了。
        if(pRoot1->val == pRoot2->val && Tree1HaveTree2(pRoot1,pRoot2))
            return true;
        else{
            return (HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2));
        }
    }
};

猜你喜欢

转载自blog.csdn.net/zhao5502169/article/details/88977013
今日推荐