1. 程式人生 > 實用技巧 >微信小程式API介面封裝

微信小程式API介面封裝

Leetcode 100相同的樹

資料結構定義:

給定兩個二叉樹,編寫一個函式來檢驗它們是否相同。

如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。

示例1:

輸入:       1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

輸出: true
示例 2:

輸入:      1          1
          /           \
         2             2

        [1,2],     [1,null,2]

輸出: false
示例3:

輸入:       1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

輸出: false

遞迴寫法:

class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if(p ==null && q == null)
            return true;
        if(p == null || q == null)
            return false;
        if(p.val == q.val){
            boolean left = isSameTree(p.left,q.left);
            boolean right = isSameTree(p.right,q.right);
            return left && right;
        }
        return false;
    }
}

廣度優先遍歷迭代:

/*
* 思路: 運用兩個Queue 分別儲存兩顆樹的節點資訊,並依次比較
*
*/
class Solution {
      public boolean isSameTree(TreeNode p, TreeNode q) {
      if(!checkSameTreeNode(p,q)){
          return false;
      }
      Queue<TreeNode> queueP = new LinkedList<>();
      Queue<TreeNode> queueQ = new LinkedList<>();
      queueP.add(p);
      queueQ.add(q);
      while(!(queueP.isEmpty() || queueQ.isEmpty())){
          TreeNode nodeP = queueP.poll();
          TreeNode nodeQ = queueQ.poll();
          if(!checkSameTreeNode(nodeP,nodeQ)){
              return false;
          }
          if(nodeP != null){
              queueP.add(nodeP.left);
              queueP.add(nodeP.right);
          }
          if(nodeQ != null){
              queueQ.add(nodeP.left);
              queueQ.add(nodeQ.right);
          }
      }
      return true;
    }

    private boolean checkSameTreeNode(TreeNode p, TreeNode q){
        if(p == null && q == null)
            return true;
        if(p == null || q == null)
            return false;
        if(p.val == q.val)
            return true;
        return false;
    }
}