17.树的子结构

题目描述:

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

思路分析:

  先找到A树中和B的根节点相同的节点,然后再去比较他们的子结构。如果A的根节点不等于B的根节点,就去看A根节点的左孩子是否和B的根节点相同,如果不同就去看右孩子,这样递归下去,只要在A中找到和B根节点相同的节点,就去判断他们的子结构是否相等。

代码:

/**
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;
        boolean res=false;    //使用这个变量的原因是树中的节点可能有重复,所以不能直接返回结果,需要更新这个变量最后返回
        if(root1.val==root2.val)
            res=isSubtree(root1,root2);
        if(!res)
            res=HasSubtree(root1.left,root2);
        if(!res)
            res=HasSubtree(root1.right,root2);
        return res;
    }
    public boolean isSubtree(TreeNode root1,TreeNode root2){
        if(root1==null&&root2!=null)
            return false;
        if(root2==null)
            return true;
        
        if(root1.val!=root2.val)
            return false;
        return isSubtree(root1.left,root2.left)&&isSubtree(root1.right,root2.right);
    }
}
原文地址:https://www.cnblogs.com/yjxyy/p/10720497.html