java二叉树镜像_给定一个二叉树,检查它是否是镜像对称的。

原题

给定一个二叉树,检查它是否是镜像对称的。

原理

以根节点划分中心线,检查是否镜像对称。

f8220bd30feb089df8bdaf8f8865a462.png

一个指向从左节点出发,一个节点从右节点出发比较。

左节点的左孩子和右节点的右孩子比较

左节点的右孩子和右节点的左孩子比较

一旦不符合(非对称/值不相同)就返回false

直到叶子节点的空节点仍然没有false,就返回true

代码

class Solution {

public boolean isSymmetric(TreeNode root) {

if(root==null) {

return true;

}

return dfs(root.left,root.right);

}

public boolean dfs(TreeNode left, TreeNode right) {

//一旦不符合就返回false

//如果能遍历到叶子节点说明为true

if(left==null && right==null) {

return true;

}

//一个空一个非空返回false

if(left==null || right==null) {

return false;

}

//值不同返回false

if(left.val!=right.val) {

return false;

}

//左节点的左孩子和右节点的右孩子比较

//左节点的右孩子和右节点的左孩子比较

return dfs(left.left,right.right)

&&dfs(left.right,right.left);

}

}

//https://leetcode-cn.com/problems/symmetric-tree/solution/dong-hua-yan-shi-101-dui-cheng-er-cha-shu-by-user7/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值