题解 | #树的子结构#

树的子结构

https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=265&tqId=39228&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13&difficulty=undefined&judgeStatus=undefined&tags=&title=

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public boolean HasSubtree(TreeNode root1, TreeNode root2) {
        if (root1 == null || root2 == null) {
            return false;
        }
        //从root1的根节点开始先找到root1中和root2根节点相同的结点,root1根节点不符合条件,判断root1根节点的左右结 点是否符合,直到遍历完
        return dfs(root1, root2) || HasSubtree(root1.left, root2) ||
               HasSubtree(root1.right, root2);
    }
    public boolean dfs(TreeNode root1, TreeNode root2) {
        //root2遍历完毕,是子结构
        if (root2 == null) {
            return true;
        }
        //root2不为空,root1为空 或者 两个结点不相同 都返回false
        if (root1 == null || root1.val != root2.val ) {
            return false;
        }
        //判断它们的左右子节点是否相同
        return dfs(root1.left, root2.left) && dfs(root1.right, root2.right);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务