給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹
[1,2,2,3,4,4,3]
是對稱的。
1
/ \2 2
/ \ / \
3 4 4 3
但是下面這個[1,2,2,null,3,null,3]
則不是映象對稱的:
1
/ \2 2
\ \
3 3
解法一:遞迴。
/**
* definition for a binary tree node.
* public class treenode
* treenode(int val)
* treenode(int val, treenode left, treenode right)
* }*/class
solution
treenode left = root.left;
treenode right = root.right;
return
issymmetricforleftandright
(left,right);}
// 判斷left和right是否對稱
public
boolean
issymmetricforleftandright
(treenode left,treenode right)
else
}// 判斷值是否相等
int leftval = left.val;
int rightval = right.val;
if(leftval != rightval)
// 遞迴呼叫,判斷左節點的左節點與右節點的右節點是否對稱
treenode leftnextleft = left.left;
treenode rightnextright = right.right;if(
!issymmetricforleftandright
(leftnextleft,rightnextright)
)// 遞迴呼叫,判斷左節點的右節點與右節點的左節點是否對稱
treenode leftnextright = left.right;
treenode rightnextleft = right.left;if(
!issymmetricforleftandright
(leftnextright,rightnextleft)
)return
true;}
}
解法二:迭代。
/**
* definition for a binary tree node.
* public class treenode
* treenode(int val)
* treenode(int val, treenode left, treenode right)
* }*/class
solution
// 建立佇列,特點是先進先出。
queue
queue =
newlinkedlist
<
>()
; queue.
offer
(root.left)
; queue.
offer
(root.right)
;while
(!queue.
isempty()
)else
}int leftval = left.val;
int rightval = right.val;
if(leftval != rightval)
// 再把left和right子節點放進去,注意順序
// 順序一定是left的左節點和right的右節點,然後是left的右節點和right的左節點
queue.
offer
(left.left)
; queue.
offer
(right.right)
; queue.
offer
(left.right)
; queue.
offer
(right.left);}
return
true;}
}
演算法 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3程式入口 treenode root2 new treenode 9 root2.left...
演算法 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。參考官方解法,使用兩種方式完成 1.遞迴 如果乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。如果同時滿足下面的條件,兩個樹互為映象 它們的兩個根結點具有相同的值每個樹的右子樹都與另乙個樹的左子樹映象對稱 我們可以實現這樣乙個遞迴函式,通過 同步移動 兩個...
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...