Leetcode-572. Subtree of Another Tree

来源:互联网 发布:ios朗读软件 编辑:程序博客网 时间:2024/06/05 09:54

Description:

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

Example 1:
Given tree s:

     3    / \   4   5  / \ 1   2
Given tree t:
   4   / \ 1   2
Return true, because t has the same structure and node values with a subtree of s.

Example 2:
Given tree s:

     3    / \   4   5  / \ 1   2    /   0
Given tree t:
   4  / \ 1   2

Return false.


C++ Solution:

 /** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isSubtree(TreeNode* s, TreeNode* t) {        queue<TreeNode*> q;        q.push(s);        while(!q.empty())        {            TreeNode* temp = q.front();              q.pop();            if(temp-> val == t->val)               {                if(checkSubtree(temp, t))  return true;            }            if(temp->left)  q.push(temp->left);            if(temp->right) q.push(temp->right);        }        return false;    }    bool checkSubtree(TreeNode* t1, TreeNode* t2)    {        if(!t1 && !t2) return true;        else if(t1 && t2)        {            if(t1->val != t2->val)  return false;            return checkSubtree(t1->left, t2->left)&&checkSubtree(t1->right, t2->right);        }        else                return false;      }};