题解 | #树的子结构#
树的子结构
http://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88
class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { //这个函数是指当前root1的根与root2的根 //找到root1里的根节点与root2相同的值 if (root1==null||root2==null){ return false; } if (root1.val==root2.val&&(helper(root1.left,root2.left))&&(helper(root1.right,root2.right))){ //当前这个根就是相同的,看各自左右是否能对应 return true; }else { //如果不对应,换根 return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2); } } public boolean helper(TreeNode root1,TreeNode root2){ //判断两个数是否是相同的 //注意!!!判断空的顺序非常重要 if (root2==null){ return true; } if (root1==null) { return false; } if (root1.val==root2.val){ return helper(root1.left,root2.left)&&helper(root1.right,root2.right); }else { return false; } } }
先找A中的根与B根对应 然后在看对应的左右子树是否对应
在判断左右子树是否对应当中要注意 先判断b是否为空 如果b为空那么一定是子节点 因为上一层已经判断了根是相同了的
在helper中如果进来的节点值相同那么一次看左右对应的是不是相同的