面试题26:树的子结构

134 阅读1分钟

题目

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

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

思路

首先找到A中节点值等于B根节点的节点,然后递归判断,如果false,继续找相等的节点,直到找不到

要注意A中可能不止一个相等的节点,所以要遍历A中所有节点,直到返回true,否则,返回false

代码

class Solution {
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        bool ans=false;
        if(A&&B){#保证A和B都非空
            if(A->val==B->val)
                ans=f(A,B);
            if(!ans)#如果返回false,左子树继续找相等节点
                ans=isSubStructure(A->left,B);
            if(!ans)#右子树继续找相等节点
                ans=isSubStructure(A->right,B);
        }
        return ans;
    }
    bool f(TreeNode *A,TreeNode *B){
        if(!B)
            return true;
        if(!A)
            return false;
        if(A->val!=B->val)
            return false;
        return f(A->left,B->left)&&f(A->right,B->right);#刚进入函数都是相等的,判断左子树和
                                                     #右子树是否相等,直到把B所有节点判断完
    }
};

题目链接(leetcode-cn.com/problems/sh…)