树的子结构

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

思路
递归遍历这棵树, 判断root1.val == root2.val, 若相等的话再判断以root1.left根的树是否完全包含root2以及以root1.right根的树是否完全包含root2,如包含的话就返回true;否则的话再递归判断 root1.leftroot2 以及root1.right与root2

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1 == null || root2 == null) return false;
if(root1.val == root2.val && isSub(root1.left, root2.left) && isSub(root1.right, root2.right)){
return true;
}
else{
return HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
}

}
public boolean isSub(TreeNode root1, TreeNode root2){
if(root2 == null) return true;
if(root1 == null) return false;
if(root1.val != root2.val) return false;
return isSub(root1.left, root2.left) && isSub(root1.right, root2.right);
}
}
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • © 2020 Zhang-Ke
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信