输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
2017-11-08 19:02
288 查看
分析:本题是2010年微软校园招聘的一道题目。我们主要是利用二叉树的前序遍历算法(可有其他的便利算法实现)来将节点之间依次匹对,代码如下:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean l=false;
public boolean r=false;
public boolean h=false;
public boolean flag=true;//使用flag来进行标记是否是头结点进行比对
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if((root1==null && root2!=null) ||((root1!=null && root2==null)&& flag)
|| ((root1==null && root2==null)&& flag)){
return false;
}else if((root1==null && root2 ==null) || (root1!=null && root2==null)){
return true;
}else if(root1.val ==root2.val){
flag=false;
//查找root2的左子树是否满足条件
l= HasSubtree(root1.left,root2.left);
//查找root2的右子树是否满足条件
if(l){
//左节点满足条件,判断右节点
r= HasSubtree(root1.right,root2.right);
}
if(r){
//右节点满足条件
return true;
}
}else if(root1.val !=root2.val){
return false;
}
if(root1 !=null && root2 !=null){
flag=false ;
//查找root2是否是root1左子树的子结构
h= HasSubtree(root1.left,root2);
if(!h){
//查找root2是否是root1右子树的子结构
h= HasSubtree(root1.right,root2);
}
}
return h;
}
}
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean l=false;
public boolean r=false;
public boolean h=false;
public boolean flag=true;//使用flag来进行标记是否是头结点进行比对
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if((root1==null && root2!=null) ||((root1!=null && root2==null)&& flag)
|| ((root1==null && root2==null)&& flag)){
return false;
}else if((root1==null && root2 ==null) || (root1!=null && root2==null)){
return true;
}else if(root1.val ==root2.val){
flag=false;
//查找root2的左子树是否满足条件
l= HasSubtree(root1.left,root2.left);
//查找root2的右子树是否满足条件
if(l){
//左节点满足条件,判断右节点
r= HasSubtree(root1.right,root2.right);
}
if(r){
//右节点满足条件
return true;
}
}else if(root1.val !=root2.val){
return false;
}
if(root1 !=null && root2 !=null){
flag=false ;
//查找root2是否是root1左子树的子结构
h= HasSubtree(root1.left,root2);
if(!h){
//查找root2是否是root1右子树的子结构
h= HasSubtree(root1.right,root2);
}
}
return h;
}
}
相关文章推荐
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 剑指offer-输入两棵二叉树A,B,判断B是不是A的子结构(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 剑指offer 18---输入两棵二叉树A和B,判断B是不是A的子结构
- 题目:输入两棵二叉树A和B,判断B是不是A的子结构。
- 15.输入两棵二叉树A,B,判断B是不是A的子结构
- java实现输入两棵二叉树A,B,判断B是不是A的子结构
- 输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)
- 剑指offer:输入两棵二叉树A,B,判断B是不是A的子结构(Python)
- 输入两棵二叉树A,B,判断B是不是A的子结构
- 第6天 输入两棵二叉树A和B,判断B是不是A的子结构。
- 输入两棵二叉树A,B,判断B是不是A的子结构。
- 输入两颗二叉树A,B,判断B是不是A的子结构