題目:給定一個二叉樹,判定是否是對稱二叉樹。
解題:若這個棵二叉樹的先遍歷左結點再遍歷有結點和先遍歷有結點後遍歷左結點,訪問到的結點值相同(包括null結點),則表明這個樹爲對稱二叉樹。
代碼如下:
#include “iostream”
using namespace std;
bool isSymmetrical(TreeNode*pRoot)
{
return isSymmetrical(pRoot, pRoot);
}
bool isSymmetrical(TreeNode*pRoot1, TreeNode*pRoot2)
{
if (pRoot1==NULL&&pRoot2==NULL)
{
return true;
}
if (pRoot1==NULL||pRoot2==NULL)
{
return false;
}
if (pRoot1->value!=pRoot2->value)
{
return false;
}
return isSymmetrical(pRoot1->left, pRoot2->right) && isSymmetrical(pRoot1->right, pRoot2->left);
}