标签:题目 leetcode isequal play 左右子树 bsp root node img
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/dui-cheng-de-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目判断二叉树是不是对称二叉树?关键在于:判断对称二叉树要进行左右子节点的同时判断,流程大概如下图;
对root节点的左右子节点进行判断,如果相等则开启递归判断;递归逻辑为:判断两个A和B节点 先判断A.left.value == B.right.value然后A.left.right == B.left.value是不是相等。如果都相等则返回true。整体来看这种判断方式依然是前序遍历的一种变形,先操作本节点,然后根据当前情况再去操作子节点。
针对本题目我们设计的方法是:首先判断的两个子节点想不想等,如果相等则进行迭代判断。迭代三要素为:
说到这里我们来回归前面做过的题目;对二叉树的镜像输出;请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1
我们当时采用的对每一个节点左右子节点进行交换的方式来处理!通过前序遍历的顺序对当前节点进行左右子树的交换!!!
上面两种对二叉树迭代操作又有区别又有联系!应该都要好好理解,两次比较操作的应该采用第一种方式。单侧操作的采用第二种方式
class Solution { public boolean isSymmetric(TreeNode root) { if(root == null){ return true; } if(root!=null&&root.right==null&&root.left==null){ return true; } if(root!=null&&root.left!=null&&root.right!=null) { return isEqual(root.left, root.right); } else{ return false; } } //通过递归来判断两个树是不是相等的 //递归三要素 //1:递归终止条件:两个节点值不等,则不可能对称。两个节点有一个为null,则不可能对称。 //2:递归终止情况处理:直接return false,代表不可能对称 //3:递归逻辑:如果当前节点值相等则继续递归判断。 public boolean isEqual(TreeNode A,TreeNode B) { if(A == null&&B == null){ return true; } if(A == null||B == null){ return false; } if(A.val != B.val){ return false; }else { //这种方式意味着,当前仅当,isEqual(A.left,B.right)为真的情况下, //才会有必要继续判断isEqual(A.right,B.left)。 return isEqual(A.left,B.right)&&isEqual(A.right,B.left); } } }
标签:题目 leetcode isequal play 左右子树 bsp root node img
原文地址:https://www.cnblogs.com/dazhu123/p/12512407.html