java实现:输入两颗二叉树A,B,判断B是不是A的子结构

来源:互联网 发布:金蝶软件版本 编辑:程序博客网 时间:2024/06/05 02:58

这道题是剑指offer题库中一道题,网上大都是C/C++的写法,不过算法最重要的是思想。

判断B是否为A的子结构分两步:

1.在A中找到和B的根结点值一样的结点R

2.判断A中以R为根结点的子树是不是包含和B树一样的结构

注意:定义空树不是任何树的子树,空树也不包含任何子树

java代码如下:

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(root1.val==root2.val){    result=DoesTreeAHaveTreeB(root1,root2);    }    if(result==false){    result=HasSubtree(root1.left,root2);    }    if(result==false){    result=HasSubtree(root1.right,root2);    }    }    return result;    }public boolean DoesTreeAHaveTreeB(TreeNode root1,TreeNode root2){if(root2==null)return true;if(root1==null)return false;if(root1.val!=root2.val)return false;return DoesTreeAHaveTreeB(root1.left,root2.left)&&DoesTreeAHaveTreeB(root1.right,root2.right);}}
注意空树情况,以及各种边界判断,程序用递归写的,比较容易理解。树尤其是二叉树是非常重要的存储结构,同时衍生出很多特殊结构,用于解决生活中的实际问题,希望在不断的学习练习中熟练掌握,灵活应用,更好的解决问题。

0 0
原创粉丝点击