转载请标明出处http://www.cnblogs.com/haozhengfei/p/939baf5542d28226fb8be17272625afa.html
拓扑结构相同子树问题
![](https://images2015.cnblogs.com/blog/1008304/201703/1008304-20170314202558416-2025564320.jpg)
![](https://images2015.cnblogs.com/blog/1008304/201703/1008304-20170314202559182-253725169.jpg)
![](https://images2015.cnblogs.com/blog/1008304/201703/1008304-20170314202559557-1944995211.jpg)
代码示例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.hzf.string; 2 3 import org.junit.Test; 4 5 /** 6 * 对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。 7 * 8 * 给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。 9 * 10 * @author hzf 11 * 12 */ 13 class TreeNode { 14 int val = 0; 15 TreeNode left = null; 16 TreeNode right = null; 17 18 public TreeNode(int val) { 19 this.val = val; 20 } 21 } 22 23 public class IdenticalTree { 24 public boolean chkIdentical(TreeNode A, TreeNode B) { 25 String sbA = preOrderTraverse(A).toString(); 26 String sbB = preOrderTraverse(B).toString(); 27 return sbA.contains(sbB); 28 29 } 30 31 //二叉树前序遍历 32 public String preOrderTraverse(TreeNode node){ 33 if(node == null) 34 return "#!"; 35 String sb = node.val + "!"; 36 sb += preOrderTraverse(node.left); 37 sb += preOrderTraverse(node.right); 38 return sb; 39 } 40 @Test 41 public void test(){ 42 String aString = "1245367"; 43 String bString = "4"; 44 System.out.println(aString.contains(bString)); 45 } 46 }