題目:
給定乙個二叉樹,檢查它是否是映象對稱的。
分析:
這道題我的第一反應又是遞迴,果然是對遞迴愛的深沉,看見二叉樹就想到遞迴。不過,雖然用遞迴來解沒什麼問題,但是我的思路有大問題,導致**並不簡潔,消耗記憶體和執行時間也比較高。
我的思路是既然要判斷二叉樹是否為映象對稱,那麼頂層的第乙個節點可以忽略不計,因為它不會影響到最終的結果,將整個二叉樹分為左右兩個子樹,然後根據子樹的節點按順序構建兩個集合。左子樹每層節點從左到右新增進左子樹集合,右子樹每層節點從右到左新增進右子樹集合。如果二叉樹為映象二叉樹,那麼左右子樹的集合equals結果應為true。
**:
/*** definition for a binary tree node.
* public class treenode
* } */
class
solution
list
left = new arraylist<>();
list
right = new arraylist<>();
addsonleft(root.left, left);
addsonright(root.right, right);
return
left.equals(right);
}public
void addsonleft(treenode root, listlist)
else}}
public
void addsonright(treenode root, listlist)
else}}
}
映象二叉樹
映象二叉樹與二叉樹的區別是左右孩子對於根節點的相對大小剛好相反不用建立映象樹,通過對原樹的映象便歷,即可得到所需的東西。後序 樹 lr根,映象 rl根。如果創立映象二叉樹,insert 改一下即可,這樣可以把preordermirror 等去掉。對於遍歷後的排序放到vector陣列裡便於比較,而且進...
映象二叉樹
題目描述 操作給定的二叉樹,將其變換為源二叉樹的映象。思路 1 獲取源二叉樹的映象,將源二叉樹的左右子樹交換即可 2 主要步驟 若二叉樹為空,直接返回 若二叉樹不為空,交換其左右子樹 遞迴的將二叉樹的其他結點進行交換 public class treenode public class soluti...
詳解二叉樹遞迴經典例題 二叉樹的映象
操作給定的二叉樹,將其變換為源二叉樹的映象。二叉樹的映象定義 源二叉樹 8 6 10 5 7 9 11 映象二叉樹 8 10 6 11 9 7 5 對我而言,第一眼看上去就像一道遞迴題。言歸正傳,所謂的映象二叉樹無非就是左右交換,你可以自頂向下地左右交換,也可以自底向上地左右交換。對我來說,可能自底...