101. 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [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
高階:你可以運用遞迴和迭代兩種方法解決這個問題嗎?
思路:映象對稱,在某個節點root上總左右相等:root.left == root.right,擴充套件開來就是左右子樹的映象對稱。
那麼考慮從根節點開始,對左右子樹分別進行映象遍歷。
例如,對左子樹:根-左-右,那麼對右子樹則是:根-右-左。
**如下:
遞迴實現:
func issymmetric(root *treenode) bool
rl := root.left
rr := root.right
flag := true
run(rl,rr,&flag)
return flag
}func run(l,r *treenode,flag *bool)
if (l == nil && r != nil) || (l != nil && r== nil)
if l != nil && r != nil
}//左右採用映象遍歷
run(l.left,r.right,flag)
run(l.right,r.left,flag)
}
非遞迴方法,我使用的是非遞迴前序遍歷,用其他遍歷方法也可。
func issymmetric(root *treenode) bool
stackl := make(*treenode,0)
stackr := make(*treenode,0)
l := root.left
r := root.right
//前序映象遍歷
for len(stackr)!=0 || len(stackl) != 0 || l != nil || r != nil
if l != nil && r == nil
for l != nil && r != nil
l = l.left
r = r.right
if l == nil && r != nil
if l != nil && r == nil
}ltop := stackl[len(stackl)-1]
rtop := stackr[len(stackr)-1]
stackl = stackl[:len(stackl)-1]
stackr = stackr[:len(stackr)-1]
l = ltop.right
r = rtop.left
if l == nil && r != nil
if l != nil && r == nil
}return true
}
101 對稱二叉樹(樹)
方法一 遞迴 一棵樹是對稱的,當它的左子樹和右子樹是映象時,滿足條件 所以用遞迴很好解決 definition for a binary tree node.public class treenode class solution public boolean symmetric treenode ...
101 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。思路 遞迴就用dfs,迭代是b...
101 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。解題思路 對稱二叉樹可以理解...