版权声明:转载请注明来源 https://blog.csdn.net/tangyuan_sibal/article/details/88587660
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
右树为左树的一个子结构
思路:采用递归方法,
1、在左树中查找到跟右树根节点相等的节点
2、如果找到根节点一样的,判断左右子树是不是相等,如果是,则为true,当右树的所有节点都匹配成功时,则返回结果。
/**
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 result = false;
if(root1!=null&&root2!=null)
{
if(Equal(root1.val,root2.val))
result = DoesTreeHaveTree2(root1,root2);
if(!result)
result = HasSubtree(root1.left,root2);
if(!result)
result = HasSubtree(root1.right,root2);
}
return result;
}
private static boolean DoesTreeHaveTree2(TreeNode root1,TreeNode root2)
{
if(root2==null)
return true;
if(root1==null)
return false;
if(!Equal(root1.val,root2.val))
return false;
return DoesTreeHaveTree2(root1.left,root2.left)
&&DoesTreeHaveTree2(root1.right,root2.right);
}
private static boolean Equal(int num1,int num2)
{
if(num1-num2==0)
return true;
else
return false;
}
}
总结:跟树扯上关系的一定要把握好递归的思想来查找它的左右子树。