【二叉树是否对称】Symmetric Tree
来源:互联网 发布:java面试造假 编辑:程序博客网 时间:2024/06/08 16:56
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree is symmetric:
1 / \ 2 2 / \ / \3 4 4 3
But the following is not:
1 / \ 2 2 \ \ 3 3
Note:
Bonus points if you could solve it both recursively and iteratively.
解法一:性能不怎么好的递归,先按原树创建一个镜像再比较两棵树是否一致
若要加强的话,可以直接在原树上比较,递归比较左右节点的值是否相同
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode mirror(TreeNode root){ if(root == null) return null; TreeNode left = mirror(root.left); TreeNode right = mirror(root.right); TreeNode nr = new TreeNode(root.val); nr.left = right; nr.right = left; return nr; } public boolean isSame(TreeNode p1, TreeNode p2){ if(p1==null && p2==null) return true; if(p1 == null && p2 != null) return false; if(p1 != null && p2 == null) return false; return (p1.val == p2.val) && isSame(p1.left, p2.left) && isSame(p1.right, p2.right); } public boolean isSymmetric(TreeNode root) { if(root == null) return true; TreeNode p = mirror(root); return isSame(root, p); }}解法二:递归,直接比较原树的左右节点值
public class Solution { public boolean isSame(TreeNode p1, TreeNode p2){ if(p1==null && p2==null) return true; if(p1 == null && p2 != null) return false; if(p1 != null && p2 == null) return false; return (p1.val == p2.val) && isSame(p1.left, p2.right) && isSame(p1.right, p2.left); } public boolean isSymmetric(TreeNode root) { if(root == null) return true; return isSame(root, root); }}
解法三:使用两个队列分别遍历树的左右节点,并比较值
public class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; Queue<TreeNode> q1 = new LinkedList<TreeNode>(); Queue<TreeNode> q2 = new LinkedList<TreeNode>(); if(root.left != null) q1.add(root.left); if(root.right != null) q2.add(root.right); while(!q1.isEmpty() && !q2.isEmpty()){ TreeNode t1 = q1.remove(); TreeNode t2 = q2.remove(); if(t1.val == t2.val){ if(t1.left != null && t2.right != null){ q1.add(t1.left); q2.add(t2.right); }//注意判断的条件,只有一个不为空,一个为空才不对称 else if((t1.left!=null && t2.right==null) || (t1.left==null && t2.right!=null)) return false; if(t1.right != null && t2.left != null){ q1.add(t1.right); q2.add(t2.left); } else if((t1.right !=null && t2.left==null) || (t1.right==null && t2.left!=null)) return false; } else{ return false; } } if(q1.isEmpty() && q2.isEmpty()) return true; return false; }}
0 0
- 【二叉树是否对称】Symmetric Tree
- 判断二叉树是否是水平对称的 Symmetric Tree
- LeetCode(Symmetric Tree)判断二叉树是否是对称的
- Leetcode-Symmetric Tree——判断二叉树是否对称
- 101. Symmetric Tree (判断二叉树是否对称)
- leetcode_101. Symmetric Tree 对称树, 判断一棵二叉树是否对称,递归方法
- 【leetcode 二叉树对称判断】Symmetric Tree
- Symmetric Tree[LeetCode]对称二叉树
- Leetcode Symmetric Tree 对称二叉树
- 判断树是否对称 101. Symmetric Tree
- 二叉树系列 - [LeetCode] Symmetric Tree 判断二叉树是否对称,递归和非递归实现
- [LeetCode] Symmetric Tree 判断二叉树是否为对称二叉树
- Symmetric Tree 对称树
- 二叉树镜像,对称二叉树的判断-symmetric Tree
- leetcode 101.Symmetric Tree-对称二叉树|深度遍历
- 101Symmetric Tree判断对称二叉树dfs
- 101. Symmetric Tree--判断是否为对称树
- LeetCode-101-Symmetric Tree(判断是否为对称树)
- Linux驱动之设备模型(2)
- 韩睿(Henry Han)的VB.NET之旅
- Works applications 2014笔试题(1)
- C++中,函数名前的const和函数名后的const的区别
- 【ORACLE RAC】修改归档位置: FRA和其他位置
- 【二叉树是否对称】Symmetric Tree
- hdu4396 多状态spfa
- Construct Binary Tree from Preorder and Inorder Traversal
- ubuntu apache 服务器 文件下载
- MSTP域
- BAT 批处理脚本 教程
- 开源项目(库)之boost::asio学习(一)
- 使用位运算计算加减乘除四则运算
- hdu 4539 状态压缩DP