树的子结构

题目

牛客网

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

解题思路

  1. 遍历查找相等根节点
  2. 通过递归查找当前根节点下是否包含子树 root2
  1. public boolean HasSubtree(TreeNode root1, TreeNode root2) {
  2. if (root2 == null) {
  3. return false;
  4. }
  5. LinkedList<TreeNode> pipeline = new LinkedList<>();
  6. pipeline.addLast(root1);
  7. while (!pipeline.isEmpty()) {
  8. TreeNode node = pipeline.pop();
  9. if (node == null) {
  10. continue;
  11. }
  12. pipeline.addLast(node.left);
  13. pipeline.addLast(node.right);
  14. if (node.val == root2.val && isSub(node, root2)) {
  15. return true;
  16. }
  17. }
  18. return false;
  19. }
  20. private boolean isSub(TreeNode root1, TreeNode root2) {
  21. if (root1 == null && root2 == null) {
  22. return true;
  23. }
  24. if (root1 == null) {
  25. return false;
  26. }
  27. if (root2 == null) {
  28. return true;
  29. }
  30. if (root1.val == root2.val) {
  31. return isSub(root1.left, root2.left) && isSub(root1.right, root2.right);
  32. } else {
  33. return false;
  34. }
  35. }