剑指Offer--面试题18:数的子结构--Java实现
来源:互联网 发布:淘宝怎么分期买电脑 编辑:程序博客网 时间:2024/05/16 14:51
题目描述:
输入两颗二叉树A和B,判断B是不是A的子结构。
解题思路:
要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步在树A中找到和树B的根结点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含和B一样的结构。
通常我们都会采用递归的方式,但是这里需要注意的检查边界条件,即空指针。
代码如下:
public class HasSubTreeTest { static class Node{ int key; Node left; Node right; Node(int key){ this.key = key; } } public static boolean hasSubTree(Node root1, Node root2){ boolean result = false; if(root1 != null && root2 != null){ result = doesTreeHaveTree2(root1, root2); if(!result){ result = hasSubTree(root1.left, root2); } if(!result){ result = hasSubTree(root1.right, root2); } } return result; } private static boolean doesTreeHaveTree2(Node root1, Node root2) { if(root2 == null){ return true; } if(root1 == null){ return false; } if(root1.key != root2.key){ return false; } return doesTreeHaveTree2(root1.left, root2.left) && doesTreeHaveTree2(root1.right, root2.right); } public static void main(String[] args) { Node root1 = new Node(8); Node node8 = new Node(8); Node node7 = new Node(7); root1.left = node8; root1.right = node7; Node node9 = new Node(9); node8.left = node9; Node node2 = new Node(2); node8.right = node2; Node node4 = new Node(4); Node node72 = new Node(7); node2.left = node4; node2.right = node72; Node root2 = new Node(8); Node node92 = new Node(9); Node node22 = new Node(2); root2.left = node92; root2.right = node22; System.out.println(hasSubTree(root1, root2)); }}
代码中的测试案列:
A:
B:
0 0
- 剑指Offer--面试题18:数的子结构--Java实现
- 剑指Offer:面试题18——树的子结构(java实现)
- 剑指Offer 面试题26:树的子结构 Java代码实现
- [剑指offer][面试题18]树的子结构
- 【剑指offer】面试题18:树的子结构
- 剑指offer 面试题18 树的子结构
- 剑指Offer:面试题18 树的子结构
- 《剑指Offer》面试题18:树的子结构
- 剑指offer 面试题18—树的子结构
- 【剑指Offer学习】【面试题18 :树的子结构】
- 剑指offer面试题18-树的子结构
- 剑指offer-面试题18:树的子结构
- 剑指offer之面试题18:树的子结构
- 剑指offer之面试题18树的子结构
- 剑指Offer----面试题18:树的子结构
- 剑指offer-面试题18:树的子结构
- 剑指offer面试题18:树的子结构
- 剑指offer面试题18:树的子结构
- poj 1270 Following Orders 枚举排列
- MySQL-5.6.13免安装版配置方法
- Java获得Class对象的几种方式
- 7-4
- 从java到安卓学习笔记--到15-06-16
- 剑指Offer--面试题18:数的子结构--Java实现
- Log4J配置
- Hadoop中HDFS写入文件的原理剖析
- org.hibernate.MappingException: Unknown entity
- bzoj 2482: [Spoj1557] Can you answer these queries II
- Android学习【按钮颜色修改】
- java获取各种路径的方法
- Linux下Apache+Mysql+PHP+libxml+libmcrypt+mhash+memcached安装_经过实践_没有问题
- 反射和动态代理