微信小程式API介面封裝
阿新 • • 發佈:2020-11-25
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; } }