題目資訊
給定乙個二叉樹,檢查它是否是映象對稱的。
示例1:是對稱的
1
/ \2 2
/ \ / \
3 4 4 3
示例2:不對稱
1
/ \2 2
\ \
3 3
解法一:遞迴
我們先來劃分子問題,乙個樹對稱也就最終根節點的左子樹與右子樹是對稱的映象的,那麼要求左子節點與右子節點相等的同時左節點的左子樹(右子樹)與右節點的右子樹(左子樹)對稱,還是畫個圖吧
我們傳入這兩顆樹看是否對稱,那麼有三個操作:
每次遞迴傳遞一對樹,直到最後葉子只有節點節點比較
public
boolean issymmetric(treenode root)
public
boolean check(treenode p, treenode q)
遍歷了整顆樹時間複雜度為o(n),遞迴系統棧占用大小取決於樹的層度這裡不是完全二叉樹所以它只是小於n空間複雜度為o(n)
方法二:迭代
遞迴思路寫完了,棧換成佇列使用廣度的方式完成同樣的思路,還是再畫個圖
通過佇列依次按照順序比較offer進佇列時就是乙個樹的左(右)與另乙個樹的右(左),poll出佇列的兩個也就是對應的,直到對佇列沒有後續進來的為空了仍然沒出現不滿足情況的,則是對稱二叉樹
public
boolean issymmetric(treenode root)
public
boolean check(treenode p, treenode q)
return
true;
}
時間複雜度與空間複雜度同上
總結無外乎深度優先與廣度優先,上面的兩種解都是優的解在一次樹的遍歷過程中完成對是否是對稱的判斷。如果直接暴力的還可先遍歷一遍得到序列或者陣列再判斷,比如先序遍歷與後序遍歷序列相反,比如中序遍歷結果是回文的,總之我們要先對遍歷熟悉。
LeetCode初級演算法之陣列 1 兩數之和
01題目描述 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 輸入 nums 2,7,11,15 target 9 輸出 0,1 因為 nums 0...
Leetcode初級演算法
不是很難的一道動態規劃的題,感覺做多了就記住了。class solution return dp n 此題想法就是,只要後面買的減去前面買的能大於0,就算在內,每次買完和max比較,大於max就記錄為max,如果買的sum小於0了,重新開始買,sum記為0 class solution if sum...
初級演算法之樹 層次遍歷
二叉樹的層次遍歷 給定乙個二叉樹,返回其按層次遍歷的節點值。即逐層地,從左到右訪問所有節點 例如 給定二叉樹 3,9,20,null,null,15,7 3 9 20 157返回其層次遍歷結果 3 9 20 15,7 挺簡單一題。自己寫的 複雜一點,都貼上去吧 vectorint levelorde...