树的子结构--剑指offer17(java实现)

题目描述

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

解题思路

通过主函数递归进行深入二叉树A,判断是否存在子树
通过函数a(TreeNode root1,TreeNode root2)判断二叉树B是否是以root1为头节点的子树

源码

/**
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(root2 == null)
            return false;
        if(root1 == null)
            return false;
        if(a(root1,root2))
            return true;
        else{
            return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
        }
    }
    public boolean a(TreeNode root1,TreeNode root2){
        if(root2 == null) return true;
        if(root1 == null) return false;
        if(root1.val == root2.val){
            return a(root1.left,root2.left) && a(root1.right,root2.right);
        }
        else
            return false;
    }
}
上一篇:【剑指OFFER】树的子结构


下一篇:叶⼦相似的树