剑指Offer 面试题26:树的子结构 Java代码实现

来源:互联网 发布:visual c 知乎 编辑:程序博客网 时间:2024/06/05 22:41

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

解题思路分为两步:

1.在树A中找到节点值跟B根节点值相同的节点R

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

//递归hasSubtree其实就是前序遍历了root1//如果发现root1中存在节点的值等于root2的根节点 那么调用doesTree1HaveTree2进行判断public static boolean hasSubtree(TreeNode root1,TreeNode root2){boolean result=false;if(root1!=null&&root2!=null){if(root1.val==root2.val){result=doesTree1HaveTree2(root1,root2);}if(!result){result=hasSubtree(root1.left,root2);}if(!result){result=hasSubtree(root1.right ,root2);}}return result;}

//递归判断 两个节点值相同的树节点是否符合 root1包含root2private static boolean doesTree1HaveTree2(TreeNode root1, TreeNode root2) {//递归结束条件就是到达树的叶子结点if(root2==null)return true;if(root1==null)return false;if(root1.val!=root2.val)return false;return doesTree1HaveTree2(root1.left, root2.left)&&doesTree1HaveTree2(root1.right, root2.right);}


阅读全文
0 0
原创粉丝点击