Subtree of Another Tree问题及解法

来源:互联网 发布:js动态修改style属性 编辑:程序博客网 时间:2024/06/05 14:25

问题描述:

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.

示例:

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.


Given tree s:

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

问题分析:

该问题与之前的两棵树是否相同的题目原理一样,我在此处采用了BFS,利用队列求解。

过程详见代码:

/** * 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) {        if(s == NULL && t != NULL) return false;    queue<TreeNode* > sq;    queue<TreeNode* > tq;    TreeNode* tt = t;    TreeNode* ss = s;        if(s->val == t->val)         {        if(t->left != NULL) tq.push(t->left);        if(t->right != NULL)tq.push(t->right);        if(s->left != NULL)sq.push(s->left);        if(s->right != NULL)sq.push(s->right);                while(!tq.empty() && !sq.empty())        {        t = tq.front();        s = sq.front();        tq.pop();        sq.pop();        if(s->val == t->val)        {        if(t->left != NULL) tq.push(t->left);        if(t->right != NULL)tq.push(t->right);        if(s->left != NULL)sq.push(s->left);        if(s->right != NULL)sq.push(s->right);}else return isSubtree(ss->left,tt) || isSubtree(ss->right,tt);}return tq.empty() && sq.empty() || isSubtree(ss->left,tt) || isSubtree(ss->right,tt);}        return isSubtree(ss->left,tt) || isSubtree(ss->right,tt);    }};


0 0
原创粉丝点击