1. 程式人生 > >LeetCode第101題(對稱二叉樹)

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
說明:

如果你可以運用遞迴和迭代兩種方法解決這個問題,會很加分。

這題還是很有意思的一道題,最開始的想法是把 root 的左子樹 按照 左結點,根結點,右結點 ,,root 的右子樹按照,右結點,根結點,左結點,的方式各遍歷到一個數組裡去,他們應該是完全一樣的。。。
但是 可惜的是 完全一樣的陣列 並不能說明 他們是映象的
比如 :
1
/ \
2 3
/ /
3 2
他們的遍歷結果都為 -1,3,-1,2,-1(-1 代表為null)
應該在保證根結點(相對於左子樹 和 右子樹而言)的val相同的情況下,讓 左邊的root->left (right) 等於 右邊的 root->right(left) 依次類推

程式碼如下:

	bool digui(TreeNode* root1, TreeNode *root2){
		if (root1 && root2){
			if (root1->val != root2->val) return false;
			else { 
				bool x = digui(root1->left, root2->right);
				bool y = digui(root1->right, root2->left);
				return x&&y;
			}
		}
		else if (root1 == NULL&&root2 == NULL)return true;
		else return false;
	}
	bool isSymmetric(TreeNode* root) {
		if (root) return digui(root->left, root->right);
		else return true;
	}