請實現乙個函式,用來判斷一棵二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
例如下面這棵樹為對稱的二叉樹:
通過觀察我們可以發現對稱的二叉樹有如下特點:
l->val == r->val
l->left->val == r->right->val
l->right-val == r->left->val
那麼我們處理這個問題的基本思路就是:
我們同時對這棵二叉樹進行兩個方向的遍歷,乙個遍歷順序是根結點、左子樹、右子樹;乙個遍歷的順序是根結點、右子樹、左子樹。如果兩個方向遍歷的過程中當前的結點值始終相等,那麼就可以判斷這棵二叉樹是對稱的二叉樹。
很明顯還是要使用遞迴,遞迴三部曲:
設定乙個遞迴函式issame(r1, r2)
,表示如果對稱,返回true
,否則返回false
遞迴終止條件:r1==nullptr && r2==nulllptr
, 直接返回true
,否則,如果只有乙個為nullptr
,返回false
下一步遞迴:如果r1->val == r2->val, 則issame(root1->left, root2->right) && issame(root1->right, root2->left);
**如下:
class solution
bool issymmetrical(treenode* proot) //不考慮二叉樹為空的情況
};
leetcode 二叉樹 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...
101 二叉樹 對稱二叉樹
方法一 遞迴 對於此題 遞迴的點怎麼找?從拿到題的第一時間開始,思路如下 怎麼判斷一棵樹是不是對稱二叉樹?答案 如果所給根節點,為空,那麼是對稱。如果不為空的話,當他的左子樹與右子樹對稱時,他對稱。那麼怎麼知道左子樹與右子樹對不對稱呢?在這我直接叫為左樹和右樹。答案 如果左樹的左孩子與右樹的右孩子對...
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...