class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static boolean HasSubtree2(TreeNode root1, TreeNode root2) {
if (root2 == null)
return false;
String str = "";
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(null);
stack.push(root1);
TreeNode node = null;
while ((node = stack.pop()) != null) {
str += '_' + node.val + '_';
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
String str2 = "";
node = null;
stack.push(null);
stack.push(root2);
while ((node = stack.pop()) != null) {
str2 += '_' + node.val + '_';
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
if (str.contains(str2)) {
return true;
} else {
return false;
}
}
public static TreeNode getTree(int[] node, int index) {
if (index >= node.length)
return null;
TreeNode n = null;
if (node[index] != -1) {
n = new TreeNode(node[index]);
n.left = getTree(node, index * 2 + 1);
n.right = getTree(node, index * 2 + 2);
}
return n;
}
import java.util.Stack;
public class HasSubtree {
public static void main(String[] args) {
TreeNode tree = getTree(new int[] { 8, 8, 7, 9, 2, -1, -1, -1, -1, 4, 7 }, 0);
TreeNode tree2 = getTree(new int[] { 2, 4, 7 }, 0);
boolean bool = HasSubtree(tree, tree2);
System.out.println(bool);
boolean bool2 = HasSubtree2(tree, tree2);
System.out.println(bool2);
}
public static boolean HasSubtree2(TreeNode root1, TreeNode root2) {
if (root2 == null)
return false;
String str = "";
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(null);
stack.push(root1);
TreeNode node = null;
while ((node = stack.pop()) != null) {
str += '_' + node.val + '_';
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
String str2 = "";
node = null;
stack.push(null);
stack.push(root2);
while ((node = stack.pop()) != null) {
str2 += '_' + node.val + '_';
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
if (str.contains(str2)) {
return true;
} else {
return false;
}
}
public static TreeNode getTree(int[] node, int index) {
if (index >= node.length)
return null;
TreeNode n = null;
if (node[index] != -1) {
n = new TreeNode(node[index]);
n.left = getTree(node, index * 2 + 1);
n.right = getTree(node, index * 2 + 2);
}
return n;
}
public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
boolean result = false;
if (root1 != null && root2 != null) {
if (root1.val == root2.val) {
result = isSubTree(root1, root2);
}
if (!result) {
result = isSubTree(root1.left, root2);
}
if (!result) {
result = isSubTree(root1.right, root2);
}
}
return result;
}
private static boolean isSubTree(TreeNode root1, TreeNode root2) {
if (root1 == null)
return false;
if (root2 == null)
return true;
if (root1.val != root2.val)
return false;
return isSubTree(root1.left, root2.left)
&& isSubTree(root1.right, root2.right);
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有