import java.util.List;
public class Symmetric {
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(2);
TreeNode node6 = new TreeNode(3);
TreeNode node7 = new TreeNode(4);
node1.left = node2;
node1.right = node5;
node2.left = node3;
node2.right = node4;
node5.left = node7;
node5.right = node6;
Symmetric test = new Symmetric();
boolean res = test.isSymmetric(node1);
System.out.println(res);
}
//思路:
//如果根节点为空直接返回true
// 如果根节点不为空,则需要对根节点的左右两棵子树进行对称判断
//如果两颗树的根都为空,返回true
//如果一颗为空另一颗不为空返回false
//如果两颗都不为空,如果根节点的值不相等返回false
//如果值相等,那么判断ltree的左子树与rtree的右子树,ltree的右子树与rtree的左子树是否同时对称,一旦一个不满足,则返回false-->递归
//所有情况满足,最终返回true
public boolean isSymmetric(TreeNode root) {
if (root == null) {
return true;
}
return judgeLeftRight(root.left, root.right);
}
public boolean judgeLeftRight(TreeNode lTree, TreeNode rTree) {
//如果两颗树的根都为空,返回true
if (lTree == null && rTree == null) {
return true;
} else if (lTree == null && rTree != null) {如果一颗为空另一颗不为空返回false
return false;
} else if (lTree != null && rTree == null) {如果一颗为空另一颗不为空返回false
return false;
} else {
if (lTree.val != rTree.val) { //如果两颗都不为空,如果根节点的值不相等返回false
return false;
}
//如果值相等,那么判断ltree的左子树与rtree的右子树,
if (!judgeLeftRight(lTree.left, rTree.right)) {
return false;
}
// ltree的右子树与rtree的左子树是否同时对称,一旦一个不满足,则返回false-->递归
if (!judgeLeftRight(lTree.right, rTree.left)) {
return false;
}
}
return true;
}
}
判断二叉树是否镜像对称的思路及JAVA代码
最新推荐文章于 2021-12-26 00:11:32 发布