LeetCode基础--二叉树-判断是否对称
2017-11-26 20:46
435 查看
题目描述:
判断一个二叉树是否左右对称,比如:
1
/ \
2 2
/ \ / \
3 4 4 3
思路:
对称的条件是:
左子树的左子结点等于右子树的右子结点,并且左子树的右子结点等于右子树的左子结点。
递归实现:
非递归实现:
判断一个二叉树是否左右对称,比如:
1
/ \
2 2
/ \ / \
3 4 4 3
思路:
对称的条件是:
左子树的左子结点等于右子树的右子结点,并且左子树的右子结点等于右子树的左子结点。
递归实现:
public class Solution { public bool IsSymmetric(TreeNode root) { if(root == null) { return true; } return IsSubSymmetric(root.left, root.right); } public bool IsSubSymmetric(TreeNode left, TreeNode right) { if(left == null && right == null) { return true; } if(left == null || right == null) { return false; } return (left.val == right.val) && IsSubSymmetric(left.left, right.right) && IsSubSymmetric(left.right, right.left); } }
非递归实现:
public class Solution { public boolean isSymmetric(TreeNode root) { Queue<TreeNode> q = new LinkedList<TreeNode>(); if(root == null) return true; q.add(root.left); q.add(root.right); while(q.size() > 1) { TreeNode left = q.poll(); TreeNode right = q.poll(); if(left== null && right == null) { continue; } if(left == null ^ right == null) { return false; } if(left.val != right.val) { return false; } q.add(left.left); q.add(right.right); q.add(left.right); q.add(right.left); } return true; } }
相关文章推荐
- 【LeetCode题目记录-11】判断二叉树是否是镜像的(对称的)
- LeetCode--判断二叉树是否对称
- LeetCode基础--二叉树--判断是否为BST
- [LeetCode] Symmetric Tree 判断二叉树是否为对称二叉树
- leetcode_101. Symmetric Tree 对称树, 判断一棵二叉树是否对称,递归方法
- Leetcode 101. Symmetric Tree 判断二叉树是否对称,注意写在两个方法中,递归时注意空的判断
- Leetcode-Symmetric Tree——判断二叉树是否对称
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
- 【LeetCode101-110】二叉树对称及存储,前序中序遍历生成二叉树,中序后序生成二叉树,数组转化为AVL平衡树,判断二叉树是否平衡
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
- [LeetCode] Symmetric Tree 判断二叉树是否为对称二叉树
- LeetCode基础--二叉树-判断二叉树是否平衡
- LeetCode基础--二叉树-判断两个树是否相同
- LeetCode(Symmetric Tree)判断二叉树是否是对称的
- 判断二叉树是否为对称二叉树
- LeetCode-101-Symmetric Tree(判断是否为对称树)
- js判断是否二叉树是否对称
- leetcode之二叉树类之二叉树中序遍历运用-----OJ173/230/98/99/285 二叉树迭代器/BST第K小元素/判断BST是否合法/恢复BST/二叉树下个节点
- C++ 判断一棵二叉树是否对称
- 判断二叉树是否对称