美文网首页
面试题18:树的子结构

面试题18:树的子结构

作者: Kitlen | 来源:发表于2020-04-18 21:44 被阅读0次

题目:

输入两棵二叉树A和B,判断B是不是A的子结构。

思路:

链接:用递归实现。抽象为两步:

1)在树A中找到与树B根结点值相等的结点。递归查找,直到在树A中找到和树B根节点相同的结点node
2)判断值相同的两个结点的左右子树是否相同。如果不相同,会重复1)的步骤,找到node才开始判断两结点左右子树是否一致。

实现:

/**
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) {
        //首先判断两个结点值是否相同,若相同,判断左右子树。
        //如果不相同,则继续判断左子树结点和root2值是否相同
        //如果左子树也不相同,则判断右子树结点和root2值是否相同
        //都不相同。返回false
        boolean hasTree = false;
        if (root1 != null && root2 != null) {
            if (root1.val == root2.val) {
                hasTree = doesTree1hasTree2(root1,root2);
            }
            if (!hasTree) {
                hasTree = HasSubtree(root1.left, root2);
            }
            if (!hasTree) {
                hasTree = HasSubtree(root1.right, root2);
            }
        }
        return hasTree;
    }

     /**
    * 左右子树是否相等
    */
    private boolean doesTree1hasTree2(TreeNode root1, TreeNode root2) {
        //如果左子树相同 && 右子树相同,则是子树
        //否则不是子树
        if (root2 == null) {
            return true;
        }

        if (root1 == null) {
            return false;
        }

        if (root1.val != root2.val){
            return false;
        }

        return doesTree1hasTree2(root1.left,root2.left) && doesTree1hasTree2(root1.right, root2.right);
    }
}

相关文章

  • 数据结构算法(四) 之 树的 2 道面试题 18 & 1

    剑指 Offer 面试题 18(Java 版):树的子结构 题目:输入两棵二叉树 A 和 B,判断 B 是不是 A...

  • 面试题18:树的子结构

    题目:输入两颗二叉树A和B,判断B是不是A 的子结构,二叉树结构定义如下: 分为两步: 1.在树A中找到和B的根结...

  • 面试题18:树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码实现 主...

  • 面试题18:树的子结构

    题目: 输入两棵二叉树A和B,判断B是不是A的子结构。 思路: 链接:用递归实现。抽象为两步: 1)在树A中找到与...

  • 18,树的子结构

    思路比较简单。若是一开始,就想用一个递归函数中,既能判断两个根节点相同的树是不是同一个树,又能对不同的根节点进行递...

  • 18 树的子结构

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

  • LeetCode | 面试题26. 树的子结构【Python】

    LeetCode 面试题26. 树的子结构【Medium】【Python】【DFS】 问题 力扣 输入两棵二叉树A...

  • 面试18:树的子结构

    【题目描述】输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)【思路】递归...

  • 剑指offer 面试题18:树的子结构

    题目:输入两棵二叉树A和B,判断B是不是A的子结构。 解法:二叉树问题,递归思路

  • 面试题18:树的子结构(剑指Offer)

    题目:输入两棵二叉树A和B,判断B是不是A的子结构。 第一步在树A中找到和B的根结点的值一样的结点R,第二步再判断...

网友评论

      本文标题:面试题18:树的子结构

      本文链接:https://www.haomeiwen.com/subject/jagavhtx.html