/* 题目: 判断给定的二叉树是否对称。 */ /* 思路: 1、递归法。 2、基础条件:两棵树均为空为true;一棵树为空,一棵树不为空,为false;两棵树的根节点值不同,为false。 3、其它:判断树1的左子树和树2的右子树是否对称,判断树1的右子树和树2的左子树是否对称。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> using namespace std; struct BinaryTreeNode { int val; BinaryTreeNode* left; BinaryTreeNode* right; BinaryTreeNode(int x) : val(x), left(NULL), right(NULL) { } }; bool isSymmetrical(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2){ if(pRoot1 == nullptr && pRoot2 == nullptr){ return true; } if(pRoot1 == nullptr || pRoot2 == nullptr) return false; bool flag = false; if(pRoot1->val == pRoot2->val){ flag = isSymmetrical(pRoot1->left,pRoot2->right) && isSymmetrical(pRoot1->right,pRoot2->left); } return flag; } bool isSymmetrical(BinaryTreeNode* pRoot){ if(pRoot == nullptr) return false; return isSymmetrical(pRoot->left,pRoot->right); } int main(){ BinaryTreeNode* node1 = new BinaryTreeNode(8); BinaryTreeNode* node2 = new BinaryTreeNode(6); BinaryTreeNode* node3 = new BinaryTreeNode(6); BinaryTreeNode* node4 = new BinaryTreeNode(5); BinaryTreeNode* node5 = new BinaryTreeNode(7); BinaryTreeNode* node6 = new BinaryTreeNode(7); BinaryTreeNode* node7 = new BinaryTreeNode(5); node1->left = node2; node1->right = node3; node2->left = node4; node2->right = node5; node3->left = node6; node3->right = node7; cout<<isSymmetrical(node1)<<endl; }