【剑指offer】树的子结构
来源:互联网 发布:数据库完整性约束条件 编辑:程序博客网 时间:2024/06/05 17:14
题目描述
输入两颗二叉树A,B,判断B是不是A的子结构。
这实际上二叉树遍历算法的一种应用,要在原二叉树中查找是否具有某课子树,只需要判断每个节点是否都在二叉树中是否出现即可。所以需要先判断头结点,只有头结点符合要求才继续比较其子树是否符合,一样依次从头结点开始比较直到其左右子树进行比较,如果都符合则说明B是A的子结构
package com.gpl.offer.jianzhi;/** * Created by gpl on 2016/8/10. */public class SubTree { public static class Node{ //树的子结构 int val; Node left; Node right; public void setLeft(Node left) { this.left = left; } public void setRight(Node right) { this.right = right; } public Node(int val){ this.val = val; } } public boolean hasSubtree(Node root1, Node root2) { boolean hasSubTree = false; if(root1 != null && root2 != null){ if(root1.val == root2.val){ hasSubTree = treeEqual(root1,root2); } if(!hasSubTree){ hasSubTree = hasSubtree(root1.left, root2); } if(!hasSubTree){ hasSubTree = hasSubtree(root1.right, root2); } } return hasSubTree; } private boolean treeEqual(Node root1, Node root2) { if(root2 == null) return true; if(root1 == null) return false; //这两个if的顺序不能变!!!!!!!!!!!!!!!!! if(root1.val != root2.val) return false; return treeEqual(root1.left, root2.left) && treeEqual(root1.right, root2.right); } public static void main(String args[]){ SubTree st = new SubTree(); Node root1 = new Node(1); Node node1 = new Node(11); Node node2 = new Node(21); root1.setLeft(node1); root1.setRight(node2); Node node3 = new Node(31); Node node4 = new Node(32); node1.setLeft(node3); node2.setLeft(node4); Node root2 = new Node(1); Node node11 = new Node(11); Node node21 = new Node(21); root2.setLeft(node11); root2.setRight(node21); System.out.println(st.hasSubtree(root1,root2)); }}
0 0
- 剑指offer:判断树的子结构
- 【剑指offer】树的子结构
- 【剑指offer】Q18:树的子结构
- 剑指offer--17树的子结构
- 剑指offer--树的子结构
- 剑指Offer之 - 树的子结构
- 剑指offer 18 - 树的子结构
- 剑指Offer-树的子结构
- 剑指offer之树的子结构
- 《剑指offer》树的子结构
- 剑指offer—树的子结构
- 剑指Offer-18-树的子结构
- 剑指offer:树的子结构
- 【剑指offer】之树的子结构
- 剑指offer 17 树的子结构
- 剑指offer 树的子结构
- 剑指offer:树的子结构
- [剑指offer]树的子结构
- Event Handling Guide for iOS--(二)---Gesture Recognizers(翻译)
- Java代理模式及动态代理
- number(数位DP)
- 计算机网络学习 1.1
- 第一次利用CSS小感
- 【剑指offer】树的子结构
- how to build a git server
- 同一页面弹框打开框 打开对应id对话框
- 学习笔记--Android Studio运行java程序
- 【转】Oracle REGEXP_LIKE介绍和例子
- Java Float.isNaN Double.isNaN方法工作原理
- 快速排序 c#实现
- shiro之自动过虑URL,无需配置。
- CTP源码分析5 CTP链路质量估计层结构及源码分析(四)----源码实现解读(一)