- 判定一棵树是否为完全二叉树
- 判定两棵树是否相同
- 判定两棵树是否有相同结构和节点值的子树
- 找出树的最大深度
- 判定一棵树是否为高度平衡的二叉树(一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1)
- 判定一棵树是否对称
- 判定一棵树是否镜像对称
import java.util.LinkedList;
import java.util.Queue;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x ;
}
static TreeNode build() {
TreeNode A = new TreeNode('A');
TreeNode B = new TreeNode('B');
TreeNode C = new TreeNode('C');
TreeNode D = new TreeNode('D');
TreeNode E = new TreeNode('E');
TreeNode F = new TreeNode('F');
TreeNode G = new TreeNode('G');
A.left = B;
A.right = C;
B.left = D;
B.right = E;
E.left = G;
C.right = F;
return A;
}
boolean isCompleteTree(TreeNode root) {
if(root == null) {
return true;
}
boolean isFirstStep = true;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer((TreeNode) root);
while(!queue.isEmpty()) {
TreeNode cur = queue.poll();
}
return isFirstStep;
}
public boolean isSameTree(TreeNode s, TreeNode t) {
if(s == null && t == null) {
return true;
}
if(s == null ||t == null){
return false;
}
return s.val == t.val && isSameTree(s.left, t.left) && isSameTree(s.right, t.right);
}
public boolean isSubtree(TreeNode s, TreeNode t) {
if(s == null) {
return false;
}
return isSameTree(s, t) || isSubtree(s.left, t) || isSubtree(s.right, t);
}
public int maxDepth(TreeNode root) {
if(root == null) {
return 0;
}
int leftDepth = maxDepth(root.left);
int rightDepth = maxDepth(root.right);
return 1 + (leftDepth > rightDepth ? leftDepth : rightDepth);
}
public boolean isBalanced(TreeNode root) {
if(root == null) {
return true;
}
if(root.left == null && root.right == null) {
return true;
}
int left = maxDepth(root.left);
int right = maxDepth(root.right);
return (left - right <= 1 && left - right >= -1) && isBalanced(root.left) && isBalanced(root.right);
}
private boolean isMirrow(TreeNode t1, TreeNode t2) {
if(t1 == null && t2 == null) {
return true;
}
if(t1 == null || t2 == null) {
return false;
}
return (t1.val == t2.val) && isMirrow(t1.left, t2.right) && isMirrow(t1.right, t2.left);
}
public boolean isSymmetric(TreeNode root) {
if(root == null) {
return true;
}
return isMirrow(root.left, root.right);
}
}