题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路: /* 二叉树A 二叉树 B
* 2 2
* / \ / \
* 8 7 4 7
* / \
* 9 2
* / \
* 4 7
*/
就好像一个女孩子想要男朋友,始于颜值,陷于才华。二叉树B的根节点就相当于颜值,它要先在A中要一个颜值相符的,找到之后再慢慢了解到底是否合适。如果发现不合适,就再找下一个颜值相符的。如果合适,(也就是它的所有子树都能匹配上)那就原地结婚吧!
/**
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) {
boolean res = false;
if (root1 == null || root2 == null ) {
return res;
}
if (root1.val == root2.val) {
res = helper(root1,root2);//颜值匹配,再去匹配各项其他。
}
if (res == false) { //糟糕,虽然颜值匹配,但是相处过程发现不太合适,那就找下一个合适的 起点重新开始。
res = HasSubtree(root1.left,root2);
}
if (res == false) {
res = HasSubtree(root1.right, root2);
}
return res;
}
public boolean helper(TreeNode root1,TreeNode root2) {
if (root2 == null) {
return true; //出口是root2遍历完,也就是所有的条件都合适!
}
if (root1 == null) {
return false;
}
if (root1.val != root2.val) {
return false;
}
return helper(root1.left,root2.left) && helper(root1.right,root2.right);
}
}