分析
1、在t1中找到与t2具有相同值的节点,然后判断这两个节点是否具有相同的拓扑结构(注意t1中可能存在多个与t2具有相同值的节点)
代码:
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root1 TreeNode类
* @param root2 TreeNode类
* @return bool布尔型
*/
boolean res = false;
public boolean isContains (TreeNode root1, TreeNode root2) {
// write code here
pre(root1,root2);
return res;
}
public void pre(TreeNode root1,TreeNode root2) {
if(root1 == null) {
return;
}
if(root1.val == root2.val) {
res = res || helper(root1,root2);
if(res == true) {
return;
}
}
pre(root1.left,root2);
pre(root1.right,root2);
}
public boolean helper(TreeNode root1,TreeNode root2) {
if(root1 == null && root2 == null) {
return true;
}
if(root1 == null || root2 == null) {
return false;
}
if(root1.val != root2.val) {
return false;
}
return helper(root1.left,root2.left) && helper(root1.right,root2.right);
}
}
2、按照某种遍历方式遍历t1和t2,然后判断t1的遍历序列中是否包含t2的序列
代码:
import java.util.*;
public class Solution {
public boolean isContains (TreeNode root1, TreeNode root2) {
// write code here
StringBuilder builder1 = new StringBuilder();
StringBuilder builder2 = new StringBuilder();
preOrder(root1,builder1);
preOrder(root2,builder2);
if(builder1.toString().contains(builder2.toString())){
return true;
}else {
return false;
}
}
//中序遍历并填充stringbuilder
static void preOrder(TreeNode treeNode,StringBuilder stringBuilder){
if(treeNode==null){
return;
}
preOrder(treeNode.left,stringBuilder);
stringBuilder.append(treeNode.val);
preOrder(treeNode.right,stringBuilder);
}
}