剑指offer----树的子结构

来源:互联网 发布:网站js被劫持 编辑:程序博客网 时间:2024/06/10 01:52
package offer;/** * 输入两棵二叉树A,B,判断B是不是A的子结构。 (ps:我们约定空树不是任意一个树的子结构) *  * @author liu * */public class HasSubTree {    public boolean HasSubtree(TreeNode root1, TreeNode root2) {        // 定义一个boolean值,用作后续判断        boolean flag = false;        // 如果子数为null,直接返回false        if (root2 == null)            return false;        // 如果子树不为null,并且父树为空返回false        if (root1 == null && root2 != null)            return false;        //判断两棵树的根节点的值是否相等        if (root1.val == root2.val) {            //判断当前节点的左右节点是否相等,也就是判断root2是不是root1的子树            flag = isSubTree(root1, root2);        }        //如果根节点不相等,就先尝试root1的左节点,也就是陆续判断左子树        if (!flag) {            flag = HasSubtree(root1.left, root2);            //左子树没有找到,再判断右子树            if (!flag) {                flag = HasSubtree(root1.right, root2);            }        }        return flag;    }    //判断是不是子树    private boolean isSubTree(TreeNode root1, TreeNode root2) {        if (root2 == null)            return true;        if (root1 == null && root2 != null)            return false;        //如果根节点的值相等        if (root1.val == root2.val) {            //当且仅当,两根节点的左节点与右节点一一对应,才返回true            return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right);        } else {            return false;        }    }}class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}
0 0
原创粉丝点击