1、判断二叉树是否镜像对称
从根开始,先判断其左右孩子,如果都不存在则为true
如果只有一个为空或者两个指向的val值不同则为false
当根的左右孩子节点相同时,再判断其左孩子的左孩子和右孩子的右孩子
左孩子的右孩子和右孩子的左孩子
1
/ \
2 2
/ \ / \
3 1 1 3
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root==NULL)
return true;
return _isSymmetric(root->left, root->right);
}
bool _isSymmetric(TreeNode* leftChild, TreeNode* rightChild)
{
if(leftChild==NULL&&rightChild==NULL)
return true;
if(leftChild==NULL||rightChild==NULL)
return false;
if(leftChild->val==rightChild->val)
{
return _isSymmetric(leftChild->left, rightChild->right) && _isSymmetric(leftChild->right, rightChild->left);
}
return false;
}
};
2、二叉树的翻转
翻转一棵二叉树
1 1
/ \ / \
2 3 =====> 3 2
/ / \ / \ \
4 5 6 6 5 4
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
_invertTree(root);
return root;
}
void _invertTree(TreeNode* root)
{
if(root==NULL)
return;
TreeNode* Node = root->left;
root->left=root->right;
root->right=Node;
_invertTree(root->left);
_invertTree(root->right);
}
};