您的位置:首页 > 其它

LeetCode题解-100-Same Tree

2016-07-06 20:03 330 查看
尽管写LeetCode解答主要是为了自己整理思路,但是如果对您也正好有帮助,请点个赞给菜鸟一点鼓励吧 :-)

原题



解法概览

解法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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 Tree LeetCode