您的位置:首页 > 职场人生

码农小汪-剑指Offer之15-树的子结构

2016-03-30 18:32 381 查看

题目描述

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

题解:

我们这个主要的问题就是,如何去判断一个是不是另一个的子树,首先一点。我们肯定涉及到对于树的值得比较,肯定会和遍历有关系啦。遍历最简单的递归去处理。

我们找到相同的根节点

我们找到根节点之后,对于树的左右进行比较,一直比较完整个字数为结束。就是这个意思。

package JianzhiOffer;
/**
* 思路:
* 1.我们要找到相同的根,然后进行一一的比较是否相等。这个过程中我们需要遍历我们的树
* 2.找到相同的根之后,进行一一的左右树的比较,也需要遍历
* @author JetWang
*
*/

public class Sloution15 {
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;
}
/**
* 这个是一个递归的过程,我们知道,root2,是roo1 的子树的条件是,对应的节点相等
* @param root1
* @param root2
* @return
*/
public boolean IsSubtree(TreeNode root1, TreeNode root2){
if(root2==null){
return true;
}
/**
* root2都不为空,root1为空肯定不相等啦
*/
if(root1==null){
return false;
}
if(root1.val!=root2.val){
return false;
}
/**
* 比较相应的左右子树
*/
return IsSubtree(root1.left,root2.left)&&IsSubtree(root1.right,root2.right);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: