数据结构与算法中二叉树子结构的详解数据结构与算法中二叉树子结构的详解
数据结构与算法中二叉树子结构的详解数据结构与算法中二叉树子结构的详解
需求需求
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
树的描述:
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;
}
}