給定乙個二叉樹,檢查它是否是映象對稱的。
例如,二叉樹 [1,2,2,3,4,4,3] 是對稱的。
1
/ \ 2
2/ \ / \34
43
但是下面這個 [1,2,2,null,3,null,3] 則不是映象對稱的:
1
/ \ 2
2 \ \
33
說明:
如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。
借助先序遍歷來實現
說明:這裡需要注意,為了區分[1,2,2,null,3,null,3]這個映象不是對稱的,需要將葉子節點的孩子節點(空節點入棧)
遞迴
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
else
return
false;}
if(i==lv.
size()
&&j==rv.
size()
)return
true
;else
return
false;}
private
:void
rootlr
(treenode* root)
}void
rootrl
(treenode* root)}}
;
非遞迴形式
先序遍歷的非遞迴思想:
借助棧來實現
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
else
return
false;}
if(i==lv.
size()
&&j==rv.
size()
)return
true
;else
return
false;}
private
:void
rootlr
(treenode* root)
v.pop();
if(p-
>right!=
null
)else
v.push
(null);
if(p-
>left!=
null
)else
v.push
(null);
}}void
rootrl
(treenode* root)
v.pop();
if(p-
>left!=
null
)else
v.push
(null);
if(p-
>right!=
null
)else
v.push
(null);
}}};
參考別人思想
leetcode討論
對稱二叉樹應該滿足的條件:
遞迴實現
遞迴的終止條件:
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
bool
judge
(treenode* rl,treenode* rr)
};
非遞迴實現
借助佇列,,佇列中相鄰兩項的值要相等,
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
bool
judge
(treenode* rl,treenode* rr)
return
true;}
};
二刷
遞迴
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
private
:bool
judge
(treenode* root1, treenode * root2)
if(root2-
>left && root1-
>right)
return
judge
(root1-
>left, root2-
>right)
&&judge
(root1-
>right, root2-
>left);}
};
LeetCode 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 說明 如果你可以遞迴地和迭代地解決它就獎勵你點數。建立乙個映象的樹,然...
LeetCode(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說明 如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。這道題也是劍指offer上的2...
leetcode 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思路 如果同時滿足下面的條件,兩個樹互為映象 它們的兩個根結點具有相同的值。每個樹的右子樹都...