【算法】判断输入是否是树的子数

来源:互联网 发布:linux 内存查询 编辑:程序博客网 时间:2024/06/05 20:02

题目描述

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

首先找到A中结点的值与B相等的结点,然后从这两个相同的结点出发,判断是否存在重合,若是返回true。否则,在树A的左右子树中寻找与B结点值相同的结点,以这些结点出发递归判断是否是A的子树。



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) {        boolean flag=false;         if(root1!=null&&root2!=null){        if(root1.val==root2.val){        flag =IsSubTree(root1,root2);        }        if(!flag){                flag= HasSubtree( root1.left, root2);         }        if(!flag){                flag= HasSubtree( root1.right, root2);         }        }                return flag;        }        public boolean  IsSubTree(TreeNode root1,TreeNode root2){//判断以root1和root2开头的子数是否重合        if(root1==null&&root2==null){        return true;        }else if(root2==null)//B树已经为空,判断到最后一个结点都相同,不论A中是否有剩余,都是A的子树        return true;        else if(root1==null)//A树判断到最后一个元素,但B还存在剩余结点,说明B不在A中,不是A的子树        return false;        else if(root1.val==root2.val){        returnIsSubTree(root1.left,root2.left)&&IsSubTree(root1.right,root2.right);        }else        return false;        }        }




原创粉丝点击