1. 程式人生 > >面試題28:對稱的二叉樹

面試題28:對稱的二叉樹

題意:請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。

思路:同時遍歷當前二叉樹和映象二叉樹,考慮節點是否相同。

節點相同1:節點同時為空

節點相同2:節點同時不為空,並且值相同,並且子樹也相同

程式碼:

struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
	bool isSymmetrical(TreeNode* pRoot)
	{
		return gao(pRoot, pRoot);
	}
	bool gao(TreeNode* pRoot1, TreeNode* pRoot2)
	{
		if (pRoot1 == NULL && pRoot2 == NULL)
			return true;
		if (pRoot1 == NULL || pRoot2 == NULL)
			return false;
		if (pRoot1 -> val != pRoot2 -> val)
			return false;
		return	 gao(pRoot1->left, pRoot2->right) && gao(pRoot1->right, pRoot2->left);
	}
};