题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:遍历A树所有结点,分别判断以A树某个结点为根节点的子结构是否与B树结构相等
import java.util.Stack;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Solution {
public boolean HasSubtree(TreeNode root1, TreeNode root2) {
if (root2 == null)
return false;
Stack<TreeNode> s = new Stack<TreeNode>();
boolean tag = false;
if (root1 != null)
s.push(root1);
while (!s.empty()) {
TreeNode node = s.pop();
if (equal(node, root2)) {
tag = true;
break;
}
if (node.right != null)
s.push(node.right);
if (node.left != null)
s.push(node.left);
}
return tag;
}
public boolean equal(TreeNode root1, TreeNode root2) {
if (root2 != null && root1 != null) {
if (root2.val != root1.val)
return false;
if (root2.left != null) {
if (!equal(root1.left, root2.left))
return false;
}
if (root2.right != null) {
if (!equal(root1.right, root2.right))
return false;
}
} else if (root2 != root1)
return false;
return true;
}
}