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

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

2017-01-19 11:32 225 查看

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

题目分析:先寻找跟子树根结点相等的结点,找到后再去比较其左右子树是否相等

//查找是否树的的子结构
public static boolean matchBinaryTree(BinaryTreeNode tree1, BinaryTreeNode tree2) {
if (tree2 == null) {//树2的结点为空,就表示前面的都匹配成功了,直接返回true
return true;
}
if (tree1 == null) {//逃过上面那步,如果树1为空了,那必然是不是子树
return false;
}
if (tree1.value == tree2.value) {//使用递归比较子树
return matchBinaryTree(tree1.left, tree2.left) && matchBinaryTree(tree1.right, tree2.right);
}
return false;
}
public static boolean isSubTree(BinaryTreeNode tree,BinaryTreeNode sub){
if(sub ==null){
return true;
}
if(tree == null){
return false;
}
if(tree.value == sub.value){//找到根节点相等就开始匹配
return matchBinaryTree(tree,sub);
}
//如果没有找到,就继续寻找到能跟sub树根结点相等的结点
return isSubTree(tree.left,sub)||isSubTree(tree.right,sub);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题