572. Subtree of Another Tree
判断一棵树是否是另一棵的子树。
对一棵树进行前序遍历,每到一个结点和另一棵树比较看是否相同:
public boolean isSubtree(TreeNode s, TreeNode t) {
if (s == null && t == null) return true;
if (s == null || t == null) return false;
if (isSame(s, t))
return true;
else {
return isSubtree(s.left, t) || isSubtree(s.right, t);
}
}
public boolean isSame(TreeNode p, TreeNode q) {
if (p == null && q == null) return true;
else if (p == null || q == null)
return false;
if (p.val != q.val) return false;
return isSame(p.left, q.left) && isSame(p.right, q.right);
}
965. Univalued Binary Tree
判断一棵树的所有结点是否都相等。
看每个结点是否等于左右子结点,如果相等再看左右子树是否也是univalued的,就是一个递归方法:
public boolean isUnivalTree(TreeNode root) {
if (root == null) return true;
if (isUnivalTree(root.left) && isUnivalTree(root.right)) {
if (root.left == null && root.right == null)
return true;
else if (root.left == null)
return root.right.val == root.val;
else if (root.right == null)
return root.left.val == root.val;
else
return (root.right.val == root.val && root.left.val == root.val);
} else
return false;
}