LeetCode题解-100-Same Tree
2016-07-06 20:03
330 查看
尽管写LeetCode解答主要是为了自己整理思路,但是如果对您也正好有帮助,请点个赞给菜鸟一点鼓励吧 :-)
解法2使用了迭代法。
原题
解法概览
解法1使用了递归;解法2使用了迭代法。
解法1
解法分析
递归判断两棵树的左子树是否相同,如果两棵子树都相同并且根节点的值也相同的话,则两棵树相同。代码
public class Solution100_Recursive { public boolean isSameTree(TreeNode p, TreeNode q) { if (p == null && q == null) return true; else if ((p == null && qa != null) || (p != null && q == null)) return false; boolean leftChildEqual = isSameTree(p.left, q.left); boolean rightChildEqual = isSameTree(p.right, q.right); if (leftChildEqual && rightChildEqual){ return p.val == q.val; }else return false; } }
解法2
解法分析
将树P与树Q节点依次push进DequeP与DequeQ,通过判断每一次push时队列的变化,可以判断出不同节点之间的位置关系;通过pop之后判断值,可以判断节点之间的值是否相同。图解
代码
public class Solution100_iterator { public boolean isSameTree(TreeNode p, TreeNode q) { Deque<TreeNode> pDeque = new LinkedList<TreeNode>(), qDeque = new LinkedList<TreeNode>(); if (p!= null) pDeque.push(p); if (q != null) qDeque.push(q); while (!pDeque.isEmpty() && !qDeque.isEmpty()){ int pSize = pDeque.size(), qSize = qDeque.size(); while (pSize-- > 0 && qSize -- >0){ TreeNode pNode = pDeque.pop(), qNode = qDeque.pop(); if (pNode.val != qNode.val) return false; if (pNode.left != null) pDeque.addLast(pNode.left); if (qNode.left != null) qDeque.addLast(qNode.left); if (pDeque.size() != qDeque.size()) return false ; if (pNode.right != null) pDeque.addLast(pNode.right); if (qNode.right != null) qDeque.addLast(qNode.right); } } return pDeque.size() == qDeque.size(); } }
相关文章推荐
- 命令行快速技巧:如何定位一个文件
- C#递归算法之分而治之策略
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#递归方法实现无限级分类显示效果实例
- jquery+CSS实现的多级竖向展开树形TRee菜单效果
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- PHP递归创建多级目录
- cmd tree命令 以树形格式罗列文件
- Javascript递归打印Document层次关系实例分析
- 无限分级和tree结构数据增删改【附DEMO下载】
- 实例讲解jQuery EasyUI tree中state属性慎用
- 推荐8款jQuery轻量级树形Tree插件
- C#递归算法寻找数组中第K大的数
- C++使用递归方法求n阶勒让德多项式完整实例