• 树的子结构
    • 题目
    • 解题思路

    树的子结构

    题目

    牛客网

    输入两棵二叉树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. }