前序遍历+StringBuffer+split方法
树的子结构
http://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88
比如:
root1前序遍历结果为:sb1=1245367
root2前序遍历结果为:sb2=245
String[] strs =sb1.toString().split(sb2.toString());
strs的长度为2,表示含有子结构
特殊情况:遍历结果相等的话,strs为空
import java.lang.StringBuffer; public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root2==null||root1==null) return false;//根据题目要求,都为null返回false if(root1==root2) return true;//两个相等 StringBuffer sb1 = new StringBuffer(); StringBuffer sb2 = new StringBuffer(); preSort(root1,sb1); preSort(root2,sb2); String[] strs = sb1.toString().split(sb2.toString()); //根据strs的情况判断是否包含子树 if(strs.length>1||strs.equals("")) return true;//第一种情况表示可以分开,第二种表示二者相等 return false; } public static void preSort(TreeNode root,StringBuffer sb){ if(root==null) return; //前序遍历 sb.append(root.val); preSort(root.left,sb); preSort(root.right,sb); } }