https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88

递归

涉及到树的问题一般都要递归做,第一次做没啥思路,代码参考自《剑指offer》层次稍微清晰一点。

  1. public boolean HasSubtree(TreeNode root1, TreeNode root2) {
  2. boolean result = false;
  3. if (root1 != null && root2 != null) {
  4. if (root1.val == root2.val) {
  5. result = HasSubtreeCore(root1, root2);
  6. }
  7. if (!result)
  8. result = HasSubtree(root1.left, root2);
  9. if (!result)
  10. result = HasSubtree(root1.right, root2);
  11. }
  12. return result;
  13. }
  14. public boolean HasSubtreeCore(TreeNode root1, TreeNode root2) {
  15. if (root2 == null)
  16. return true;
  17. if (root1 == null)
  18. return false;
  19. if (root1.val != root2.val)
  20. return false;
  21. return HasSubtreeCore(root1.left, root2.left) && HasSubtreeCore(root1.right, root2.right);
  22. }