你背不下来的书,总有人能背下来;你做不出来的题,总有人能做出来;你愿意拖到明天的事,总有人今天努力做完;那么不好意思,你想去的学校也只能别人去了,你想过的人生也只能别人过了。


路虽然很漫长,很孤单,但是只要你走出一步,你离目的地就近一步,千万不能停在原地叹息,否则永远都无法到达目的地。

Algorithm

没有哪个大牛对数据结构和算法是不熟练的。LeetCode 算法题,至少一题

给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subtree-of-another-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解:
递归遍历就可以了。

  1. public class IsSubtree {
  2. @Test
  3. public void test1() {
  4. TreeNode t1 = new TreeNode(1);
  5. t1.right = new TreeNode(2);
  6. t1.left = new TreeNode(3);
  7. TreeNode t2 = new TreeNode(1);
  8. t2.right = new TreeNode(2);
  9. t2.left = new TreeNode(3);
  10. IsSubtree isSubtree = new IsSubtree();
  11. boolean subtree = isSubtree.isSubtree(t1, t2);
  12. Assert.assertTrue(subtree);
  13. }
  14. @Test
  15. public void test2() {
  16. TreeNode t1 = new TreeNode(1);
  17. t1.right = new TreeNode(2);
  18. t1.left = null;
  19. TreeNode t2 = new TreeNode(1);
  20. t2.right = new TreeNode(2);
  21. t2.left = new TreeNode(3);
  22. IsSubtree isSubtree = new IsSubtree();
  23. boolean subtree = isSubtree.isSubtree(t1, t2);
  24. Assert.assertFalse(subtree);
  25. }
  26. public boolean isSubtree(TreeNode s, TreeNode t) {
  27. if (s == null) {
  28. return false;
  29. }
  30. System.out.println(String.format("s.val= %s,t.val= %s", s.val,t.val));
  31. if (s.val == t.val) {
  32. if(tranverse(s.left,t.left) && tranverse(s.right,t.right)){
  33. return true;
  34. }
  35. }
  36. return isSubtree(s.left,t) || isSubtree(s.right,t);
  37. }
  38. public boolean tranverse(TreeNode s, TreeNode t) {
  39. if (s == null && t == null) {
  40. return true;
  41. }
  42. if (s == null || t == null) {
  43. return false;
  44. }
  45. if (s.val == t.val) {
  46. return tranverse(s.left,t.left) && tranverse(s.right,t.right);
  47. }
  48. return false;
  49. }
  50. /**
  51. * Definition for a binary tree node.
  52. */
  53. public static class TreeNode {
  54. int val;
  55. TreeNode left;
  56. TreeNode right;
  57. TreeNode(int x) {
  58. val = x;
  59. }
  60. }
  61. }


Review

流畅的阅读英文技术资料是一个大牛必备的。英文学习,以技术翻译为主

web 安全系列,翻译

Tip

保持好奇,保持学习。至少一个技巧,以技术技巧为主

Share

要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考的文章,也可以是技术总结的文章。

单元测试,在 idea 中单元测试覆盖率计算,需要测试代码的包路径和运行代码一致,才能计算出覆盖率,一般来说,覆盖率至少要到80%,单元测试应当遵循不依赖外部条件,减少耦合,多使用 Mock 类,例如 Spring 提供了 MockHttpServletRequest 等类。

单元测试还有一个好处就是可以让团队新成员通过运行单元测试知道代码执行结果,后期重构也可以“大胆”进行。