/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/classSolution{// 函数功能:遍历,判断 B 是否为 A 的子结构publicbooleanisSubStructure(TreeNodeA,TreeNodeB){// 空树不是任意一个树的子结构if(A==null||B==null){returnfalse;}// 先序:以 A 开始的子结构判断 || 左节点继续遍历 || 右节点继续遍历returnrecursion(A,B)||isSubStructure(A.left,B)|| isSubStructure (A.right,B);}// 函数功能:判断以A开始的树,是否包含子结构B树。booleanrecursion(TreeNodeA,TreeNodeB){// B遍历结束,说明完全覆盖了B,子结构if(B==null){returntrue;}// A遍历结束 or 节点值不同:不是子结构if(A==null||A.val !=B.val){returnfalse;}// 当前节点相同,继续进行左右子数的判断returnrecursion(A.left,B.left)&&recursion(A.right,B.right);}}
二刷
二刷居然忘了思路了= =
先对当前A,B进行符合判断,不行的话就再对A.left && B、A.right && B 进行判断。以此类推