剑指 Offer 28. 对称的二叉树【无取巧,易于理解!】
生活随笔
收集整理的這篇文章主要介紹了
剑指 Offer 28. 对称的二叉树【无取巧,易于理解!】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看題解時,很多大牛用很少的代碼就完成了AC,但可能看了很多遍也看不懂,因此萌生了寫一種最“笨”最完整的代碼的想法,這樣大家可以通過我的代碼入門,看懂了再去挑戰大牛們的簡潔解法。
請實現一個函數,用來判斷一棵二叉樹是不是對稱的。如果一棵二叉樹和它的鏡像一樣,那么它是對稱的。
示例 1:
輸入:root = [1,2,2,3,4,4,3]
輸出:true
示例 2:
輸入:root = [1,2,2,null,3,null,3]
輸出:false
限制:
0 <= 節點個數 <= 1000
題意:判斷某樹是否是對稱的
最初思路:求出其“左根右”順序的序列,求出其“右根左”順序的序列,查看二者序列是否相等即可。
特例:若某個樹的所有節點值都是相同的,則上述思路不成立。 因為即使樹不對稱,節點序列也始終相同。
改進1:將null值加入到序列中,這樣就不會因為節點相同而誤判。
改進2:直接在遞歸過程中完成判斷,避免開辟多余的存儲空間存儲數組
class Solution {public boolean isSymmetric(TreeNode root) {if(root == null) return true;// 同步對比左子樹和右子樹,因此新建一個方法進行遞歸return isSymmetric(root.left, root.right);}public boolean isSymmetric(TreeNode r1, TreeNode r2) {// 1、判斷結構是否相同(空指針)if(r1 == null && r2 == null) return true;if(r1 == null || r2 == null) return false;// 2、判斷值是否相同if(r1.val != r2.val) return false;// 3、若既同構,而且值也相等,則應遞歸boolean flag = false;flag = isSymmetric(r1.left, r2.left) && isSymmetric(r1.right, r2.right);return flag;} }
木秀于林,風必摧之;堆出于岸,流必湍之;行高于人,眾必非之。
總結
以上是生活随笔為你收集整理的剑指 Offer 28. 对称的二叉树【无取巧,易于理解!】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指 Offer 27. 二叉树的镜像【
- 下一篇: 【完整可运行代码】剑指 Offer 29