[LeetCode]572. Subtree of Another Tree

来源:互联网 发布:para海外专营店淘宝 假 编辑:程序博客网 时间:2024/05/16 23:01

572. Subtree of Another Tree
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.


/** * 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) {        bool result = false;        // 保证不为空的情况下才传给子函数处理,t题目其实已经说了不为空了        if(s != NULL && t != NULL){            // 如果值相同,则调用is函数判断是不是相同的子树            if(s->val == t->val)                result = is(s, t);            // 如果根结点不是,则分别递归判断左右子结点            if(result == false)                result = isSubtree(s->left, t);            if(result == false)                result = isSubtree(s->right, t);        }        return result;    }    // 此函数判断root1和root2 是不是相同的子树    bool is(TreeNode* root1, TreeNode* root2){        // 题目强调的是子树,不是子结构,所以只有遍历到都为空时才返回true        if(root1 == NULL && root2 == NULL)            return true;        if(root1 == NULL || root2 == NULL)            return false;        if(root1->val != root2->val)            return false;        return is(root1->left, root2->left) && is(root1->right, root2->right);    }};
原创粉丝点击