题目:
给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
解题思路+代码:
代码:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isSymmetric(TreeNode root) {/**思路:深度优先搜索1.判断根节点是否为空,为空直接返回true2.创建dfs方法,遍历左右子树,判断根左右和根右左是否相同,相同返回true,否则返回false*///判断根节点是否为空,为空直接返回trueif(root == null){return true;}//传参调用return dfs(root.left,root.right);}//创建dfspublic boolean dfs(TreeNode left,TreeNode right){//左子树和右子树都为nullif(left == null && right == null){return true;}//左子树和右子树其中一个为nullif(left == null || right == null){return false;}//左子树和右子树的值不相等if(left.val != right.val){return false;}// 递归比较左子树的左节点和右子树的右节点,以及左子树的右节点和右子树的左节点return dfs(left.left, right.right) && dfs(left.right, right.left);} }
总结:解答这道题最难是判断二叉树是否对称的几种情况(需要清晰分析):1.左右子树都为空(对称)2.左右子树其中一个为空(不对称)3.左右子树的叶节点值不相等(不对称)4.左右子树不为空且叶节点值相等(对称)5.根节点为空(对称)。