代码随想录day14
226.翻转二叉树
void reverseTree(TreeNode* node){
if(node == nullptr) return;
if(node->left) reverseTree(node->left);
if(node->right) reverseTree(node->right);
TreeNode* tmp = node->left;
node->left = node->right;
node->right = tmp;
}
TreeNode* invertTree(TreeNode* root) {
reverseTree(root);
return root;
}
101.对称二叉树
bool compare(TreeNode* left, TreeNode* right){
if(!left && !right){
return true;
}else if(!left && right){
return false;
}else if(left && !right){
return false;
}else if(left->val != right->val){
return false;
}
bool com1 = compare(left->left, right->right);
bool com2 = compare(left->right, right->left);
bool result = com1 && com2;
return result;
}
bool isSymmetric(TreeNode* root) {
if(root == nullptr) return true;
return compare(root->left, root->right);
}
559.N叉树的最大深度
int getDepth(Node* node){
if(node == nullptr) return 0;
int max = 0;
for(std::vector<Node*>::iterator it = node->children.begin(); it != node->children.end(); ++it){
int depth = getDepth(*it);
if(depth > max){
max = depth;
}
}
int depth = 1 + max;
return depth;
}
int maxDepth(Node* root) {
return getDepth(root);
}
111.二叉树的最小深度
int digui(TreeNode* node){
if(node == nullptr) return 0;
int left = digui(node->left);
int right = digui(node->right);
if(!left){
return 1 + right;
}
if(!right){
return 1 + left;
}
int depth = 1 + min(left, right);
return depth;
}
int minDepth(TreeNode* root) {
return digui(root);
}