搜索
写经验 领红包
 > 设计

树的子结构leetcode(树的子结构pytho)

在生活中,很多人可能想了解和弄清楚树的子结构的相关问题?那么关于树的子结构 leetcode的答案我来给大家详细解答下。

树的子结构 leetcode(树的子结构 python)

树的子结构

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

我们规定空树不是任何树的子结构。

样例树A:     8    / \   8   7  / \ 9   2    / \   4   7   树B:   8  / \ 9   2返回 true ,因为B是A的子结构。

递归

时间复杂度 O(nm) n 是树A中的节点数,m是树B中的节点数

class Solution {public boolean hasSubtree(TreeNode root1, TreeNode root2) {        boolean res = false;        if(root1 != null && root2 != null){            if(root1.val == root2.val){                res = helpHasSubtree(root1,root2);            }            if(!res){                res = hasSubtree(root1.left,root2);            }            if(!res){                res = hasSubtree(root1.right,root2);            }        }        return res;    }    public boolean helpHasSubtree(TreeNode root1, TreeNode root2){        if(root2 == null){            return true;        }        if(root1 == null){            return false;        }        if(root1.val != root2.val){            return false;        }        return helpHasSubtree(root1.left,root2.left) && helpHasSubtree(root1.right,root2.right);    }}

进阶版

时间复杂度 O(nm) n 是树A中的节点数,m是树B中的节点数

class Solution {    boolean hasSubtree(TreeNode pRoot1, TreeNode pRoot2) {        if(pRoot1 == null || pRoot2 == null){            return false;        }        if(isPart(pRoot1, pRoot2)){            return true;        }        return hasSubtree(pRoot1.left,pRoot2) || hasSubtree(pRoot1.right,pRoot2);    }    boolean isPart(TreeNode root1, TreeNode root2) {        if(root2 == null){            return true;        }        if(root1 == null || root1.val != root2.val){            return false;        }        return isPart(root1.left,root2.left) && isPart(root1.right,root2.right);    }}

温馨提示:通过以上关于树的子结构内容介绍后,相信大家有新的了解,更希望可以对你有所帮助。