LeetCode-Easy-相同的樹
阿新 • • 發佈:2018-11-11
LeetCode-Easy-相同的樹
Table of Contents
1 Easy-相同的樹
1.1 題目描述
給定兩個二叉樹,編寫一個函式來檢驗它們是否相同。
如果兩個樹在結構上相同,並且節點具有相同的值,則認為它們是相同的。
1.2 示例 1:
輸入: 1 1 / \ / \ 2 3 2 3
[1,2,3], [1,2,3]
輸出: true
1.3 示例 2:
輸入: 1 1 / \ 2 2
[1,2], [1,null,2]
輸出: false
1.4 示例 3:
輸入: 1 1 / \ / \ 2 1 1 2
[1,2,1], [1,1,2]
輸出: false
2 自己的解答
2.1 思路
- 使用遞迴法求解即可.
- 先判斷p樹和q樹是否都為null,如果是,返回true.
- p樹和q樹其中一個為null,返回false.
- p樹和q樹都不為null,比較其值是否相同,不同返回false.
- 如果值相同,則執行下面的遞迴程式碼,將p樹的左子節點與和q樹的左子節點比較,將p樹的右子節點與和q樹的右子節點比較.
- 最後返回左比較結果和右比較結果的與運算.
- 在函式首部新增一個判斷條件,如果左比較結果和右比較結果其一有一個為false,則直接返回false.減少遞迴的部分開銷.
2.2 程式碼
package algorithm.easy; class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public class IsSameTree { private boolean lc = true; private boolean rc = true; public boolean solution(TreeNode p, TreeNode q) { // 一旦有false,直接返回false if (!(lc && rc)) { return false; } // 如果p和q都為空樹返回true if (p == null && q == null) { return true; } else if ((p == null && q != null) || (p != null && q == null)) { // p為空, q不為空 return false; } if (p.val != q.val) { return false; } lc = solution(p.left, q.left); rc = solution(p.right, q.right); // 比較完成,均通過 return lc && rc; } }
Date: 2018-11-11 20:29
Created: 2018-11-11 日 20:29