题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
详解
先判断两二叉树的根节点的值是否相等。相等则进行判断,如果一直递归到最后 B==null,说明B是子结构。如果到最后A == null,说明B不是子结构。如果A.val != B.val,说明不是子结构。
public static boolean root1hasroot2(TreeNode root1,TreeNode root2){ if (root2 == null){ return true; } if (root1 == null){ return false; } if (root1.val != root2.val){ return false; } return root1hasroot2(root1.left,root2.left) && root1hasroot2(root1.right,root2.right); }
如果根节点不满足,则依次在判断左节点与右节点。
if (root1 != null && root2 != null){ if (root1.val == root2.val){ result = root1hasroot2(root1,root2); } if(!result){ result = root1hasroot2(root1.left,root2); } if(!result){ result = root1hasroot2(root1.right,root2); }
完整程序
/** 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 result = false; if (root1 != null && root2 != null){ if (root1.val == root2.val){ result = root1hasroot2(root1,root2); } if(!result){ result = root1hasroot2(root1.left,root2); } if(!result){ result = root1hasroot2(root1.right,root2); } } return result; } public static boolean root1hasroot2(TreeNode root1,TreeNode root2){ if (root2 == null){ return true; } if (root1 == null){ return false; } if (root1.val != root2.val){ return false; } return root1hasroot2(root1.left,root2.left) && root1hasroot2(root1.right,root2.right); } }