1、描述
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
3
/ \
4 5
/
1 2)
给定的树 B:
4
/
1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例 1:
输入:A = [1,2,3], B = [3,1]
输出:false
来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
子结构,二叉树
3、思路
递归
加辅助函数,不加辅助函数
4、notes
5、复杂度
时间:O(N)
空间:O(N)
6、code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
vector<vector<int>>res;
vector<int>path;
void dfs(TreeNode * root,int target){
if(!root) return;
path.push_back(root->val);
target -= root->val;
if(target == 0 && !root->left && !root->right) {
res.push_back(path);
}
dfs(root->left,target);
dfs(root->right,target);
path.pop_back();
}
public:
vector<vector<int>> pathSum(TreeNode* root, int target) {
dfs(root,target);
return res;
}
};