LeetCode100-Same Tree(判斷兩棵樹是否完全相同)(簡單題)
阿新 • • 發佈:2018-11-03
LeetCode100-Same Tree(判斷兩棵樹是否完全相同)(簡單題)
- 遞迴
- 非遞迴
題目連結
題目
遞迴
這題很簡單,本來不想寫的,但是還是寫一下吧。。分為五種情況:
- p、q都為空,返回true;
- p == null && q != null 返回false;
- p != null && q == null 返回false;
- p.val != q.val 返回false;
- p.val == q.val —> 去判斷他們的左右子樹是否相等(遞迴);
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null)
return true;
if(p == null || q == null)
return false;
return p.val == q.val && isSameTree(p.left,q.left) && isSameTree(p.right, q.right);
}
}
非遞迴
這個也很簡單,棧中儲存兩棵樹的節點即可(使用陣列),當然也可以使用兩個棧,然後利用前序非遞迴類似的方式非遞迴,判斷條件還是和遞迴一樣,只不過改成了非遞迴而已。
class Solution {
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q == null)
return true;
if(p == null || q == null)
return false;
Stack<TreeNode[]>stack = new Stack<>();
stack.push(new TreeNode[]{p,q});
while(!stack.isEmpty()){
TreeNode[] top = stack.pop();
if(top[0] == null && top[1] == null)
continue;
if(top[0] == null || top[1] == null)
return false;
if(top[0].val != top[1].val)
return false;
stack.push(new TreeNode[]{top[0].left,top[1].left});
stack.push(new TreeNode[]{top[0].right,top[1].right});
}
return true;
}
}