[leetCode]剑指 Offer 26. 树的子结构
解法递归
求解过程可以分为两步:
1. 遍历A中节点,找到与B中根节点相同的节点
第一步可以使用递归实现线序遍历
2. 判断是否存在相同的结构
第二步可以可以使用递归判断A、B左右子树结构是否相同
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
boolean result = false;
if(A != null && B != null){
if(A.val == B.val){
result = doseTreeAHasTreeB(A, B);
}
if(!result)
result = isSubStructure(A.left, B);
if(!result)
result = isSubStructure(A.right,B);
}
return result;
}
private boolean doseTreeAHasTreeB(TreeNode A, TreeNode B){
if(B == null)
return true;
if(A == null)
return false;
if(A.val != B.val)
return false;
return doseTreeAHasTreeB(A.left,B.left) && doseTreeAHasTreeB(A.right, B.right);
}
}