树的子结构

较难  通过率:24.66%  时间限制:1秒  空间限制:64M
 
知识点二叉树
  • 题目
  • 题解(69)
  • 讨论(1k)
  • 排行

描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

示例1

输入:
{8,8,#,9,#,2,#,5},{8,9,#,2}
返回值:
true
 
 
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    
    bool dfs(TreeNode* node1,TreeNode* node2){
        if(node2 == NULL) return true;
        
        if(node1 == NULL) return false;
        
        if(node1->val == node2->val){
            return dfs(node1->left,node2->left) && dfs(node1->right,node2->right);
        }
        
        return false;
    }
    
    

    
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
        
        bool result = false;
        if(pRoot1 && pRoot2){
            
            
            if(pRoot1->val == pRoot2->val) {
                result = dfs(pRoot1,pRoot2);
            }
            
            if(!result) result = HasSubtree(pRoot1->left,pRoot2);
            
            if(!result) result = HasSubtree(pRoot1->right,pRoot2);
                
                
        }
        
        return result;
    }
};

java+注释

https://www.cnblogs.com/lishanlei/p/10707732.html

原文地址:https://www.cnblogs.com/cunyusup/p/14910891.html