LeetCode——100. 相同的樹
阿新 • • 發佈:2018-12-10
這題主要是會出現多種空指標異常情況,要考慮多種情況才不會報異常。
題目
給定兩個二叉樹,編寫一個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
示例 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
解題思路
採用分而治之的思想,遞推判斷兩節點的每一個子節點的val是否相同。
程式碼實現
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { return isSame(p, q); } public static boolean isSame(TreeNode p, TreeNode q) { if ((p == null && q != null) || (p != null && q == null)) // 一邊為空節點,一邊不為空。 return false; else if (p == null && q == null) // 兩邊都為空返回true return true; else { if (p.val != q.val) return false; else if (p.left !=null && q.left != null && p.left.val != q.left.val) return false; else if (p.right !=null && q.right != null && p.right.val != q.right.val) return false; boolean b = true; b = isSame(p.left, q.left); if (b == false) { return false; } b = isSame(p.right, q.right); if (b == false) { return false; } } return true; } }