1.原题
链接:https://leetcode.com/problems/symmetric-tree/
2.题目大意给出一棵树,判断其是否是其自身的镜像。
3.解题思路
其镜像和其自身相同,根据画图可得规律:首先从根结点开始,判断其左右结点是否相同:左右结点均为null,符合;其中一个为null,不符;左右结点非空但值不同,不符;左右结点非空且值相同,再递归判断其左结点的左结点和右结点的右结点是否相同,以及左结点的右结点和右结点的左结点是否相同。
4.代码实现
递归实现:
public boolean isSymmetric(TreeNode root) {
return root==null || isSymmetric(root.left, root.right);
}
public boolean isSymmetric(TreeNode left,TreeNode right) {
if(left==null || right==null)
return left==right;
return isSymmetric(left.left, right.right)&&isSymmetric(left.right, right.left);
}
循环实现:
需要额外的栈来保存
参考:https://discuss.leetcode.com/topic/5941/recursive-and-non-recursive-solutions-in-java
相关:
求二叉树的镜像过程:先前序遍历这棵树的每个结点,如果遍历的结点有子结点,就交换它的两个子结点。当交换为所有非叶子结点的左右结点之后,就得到了树的镜像