1. 程式人生 > >LeetCode100-Same Tree(判斷兩棵樹是否完全相同)(簡單題)

LeetCode100-Same Tree(判斷兩棵樹是否完全相同)(簡單題)

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; } }