翻转二叉树
力扣题目链接
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
traversal(root);
return root;
}
void traversal(TreeNode* root){
if(!root) return;
TreeNode* tmp = root->left;
root->left = root->right;
root->right = tmp;
if(root->left) traversal(root->left);
if(root->right) traversal(root->right);
}
};
对称二叉树
力扣题目链接
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return isSame(root->right, root->left);
}
bool isSame(TreeNode* r, TreeNode* l){
if((r && !l) || (!r && l))
return false;
else if(!r && !l)
return true;
else if(r->val != l->val)
return false;
else
return isSame(r->right, l->left) && isSame(r->left, l->right);
}
};
二叉树的最大深度
力扣题目链接
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr)
return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
};
二叉树的最小深度
力扣题目链接
class Solution {
public:
int minDepth(TreeNode* root) {
if(!root)
return 0;
if(!root->left && !root->right) //叶子节点
return 1;
if(root->left && root->right)
return min(minDepth(root->left), minDepth(root->right)) + 1;
else if(root->left)
return minDepth(root->left) + 1;
else if(root->right)
return minDepth(root->right) + 1;
return 0;
}
};