1.题目
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
2.解法
2.1 树的结构
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
要求实现的方法
public class Solution {
boolean isSymmetrical(TreeNode pRoot) {
}
}
2.2 解法1
递归实现,原有isSymmetrical
方法的参数少了,重新定义一个symmetrical
方法,递归调检查其左孩子和右孩子是否对称,并检查左孩子节点值是否与右孩子节点值相同。
boolean isSymmetrical(TreeNode pRoot) {
if(pRoot==null) return true;
return symmetrical(pRoot.left,pRoot.right);
}
boolean symmetrical(TreeNode left,TreeNode right) {
if(left==null) return right==null;
if(right==null) return left==null;
if(left.val!=right.val) return false;
return symmetrical(left.right,right.left) && symmetrical(left.left,right.right);
}
总结
递归实现,原有isSymmetrical
方法的参数少了,重新定义一个symmetrical
方法,递归调检查其左孩子和右孩子是否对称,并检查左孩子节点值是否与右孩子节点值相同。
算法系列在github上有一个开源项目,主要是本系列博客的demo代码。https://github.com/forestnlp/alg
如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。
您的支持是对我最大的鼓励。