leetcode572 另一颗树的子树

简介: leetcode572 另一颗树的子树

另一棵树的子树


cfcc5c93c3664cfcb1f60a6fc2a92fa7.png

双层递归

第一层前序遍历找点

第二层对比这个点和另一个子树是否相同

/**
 * 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 {
public:
  //第二层对比子树
    bool compare(TreeNode* cur, TreeNode* subRoot)
    {
        if(cur==nullptr && subRoot==nullptr) return true;
        else if(cur == nullptr && subRoot != nullptr) return false;
        else if(cur != nullptr && subRoot == nullptr) return false;
        if(cur->val != subRoot->val) return false;
        bool left_val = compare(cur->left,subRoot->left);
        bool right_val = compare(cur->right,subRoot->right);
        return left_val&right_val;
    }
    //第一层前序遍历看点
    void traversal(TreeNode* cur, TreeNode* subRoot , bool &val)
    {
            if(cur==nullptr) return;
            bool mid_val = compare(cur,subRoot);//调用第二层递归
            //cout<<mid_val<<endl;
            val = val | mid_val ;
            traversal(cur->left , subRoot ,val);
            traversal(cur->right , subRoot ,val);
    }
    bool isSubtree(TreeNode* root, TreeNode* subRoot) {
        bool val = false;
        traversal(root,subRoot,val);
        return val;
    }
};

相关文章
|
4月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
57 4
|
4月前
|
Python
【Leetcode刷题Python】538. 把二叉搜索树转换为累加树
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
27 3
|
7月前
|
算法 C语言 容器
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(下)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
69 7
|
7月前
|
C语言
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(中)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
63 1
|
7月前
|
算法 C语言 C++
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145(上)
从C语言到C++_25(树的十道OJ题)力扣:606+102+107+236+426+105+106+144+94+145
46 1
|
7月前
LeetCode———100——相同的树
LeetCode———100——相同的树
|
7月前
力扣337.打家劫舍3(树形dp)
力扣337.打家劫舍3(树形dp)
|
6月前
|
SQL 算法 数据可视化
LeetCode题目99:图解中叙遍历、Morris遍历实现恢复二叉树搜索树【python】
LeetCode题目99:图解中叙遍历、Morris遍历实现恢复二叉树搜索树【python】
|
6月前
|
存储 SQL 算法
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
|
6月前
|
存储 算法 数据可视化
python多种算法对比图解实现 验证二叉树搜索树【力扣98】
python多种算法对比图解实现 验证二叉树搜索树【力扣98】