1 前言
输入一个树的根节点,然后输出一个布尔值,如果树是对称的返回true,否则为false
1.1 解析
我们判断树是对称的步骤是什么呢?
【第一步】如果根节点的左子节点不为null,右子节点为null。则不是对称。
【第二步】如果根节点的左子节点为null,右子节点不为null。则不是对称。
【第三步】如果根节点的左子节点为null,右子节点为null。则是对称。
【第四步】如果根节点的左子节点不为null,右子节点不为null。但是他们的值不相等,则不是对称
if (left != null && right == null) {
return false;
} else if (left == null && right != null) {
return false;
} else if (left == null && right == null) {
return true;
} else {
if (left.value != right.value) {
return false;
}
}
【第五步】递归
return (compare(left.right, right.left) && compare(left.left, right.right));
1.2代码实现
package cn.msf.tree;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Queue;
/**
* @author : msf
* @date : 2022/12/7
*/
public class IsSymmetric {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
TreeNode node1 = new TreeNode(2);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(4);
TreeNode node6 = new TreeNode(3);
root.left = node1;
root.right = node2;
node1.left = node3;
node1.right = node4;
node2.left = node5;
node2.right = node6;
IsSymmetric is = new IsSymmetric();
boolean symmetric = is.isSymmetric(root);
System.out.println("该树是对称的嘛?" + symmetric);
}
public boolean isSymmetric(TreeNode treeNode) {
if (treeNode == null) {
return true;
}
return compare(treeNode.left, treeNode.right);
}
private boolean compare(TreeNode left, TreeNode right) {
if (left != null && right == null) {
return false;
} else if (left == null && right != null) {
return false;
} else if (left == null && right == null) {
return true;
} else {
if (left.value != right.value) {
return false;
}
}
// 由于函数的结果是布尔值,只有全为真是才是真。
return (compare(left.right, right.left) && compare(left.left, right.right));
}
}
其中的TreeNode实现
package cn.msf.tree;
/**
* @author : msf
* @date : 2022/12/2
*/
public class TreeNode{
int value;
TreeNode left;
TreeNode right;
public TreeNode() {
}
public TreeNode(int value) {
this.value = value;
}
public TreeNode(int value, TreeNode left, TreeNode right) {
this.value = value;
this.left = left;
this.right = right;
}
}
上述代码运行结果如下图所示: