目录
[226. 翻转二叉树](#226. 翻转二叉树)
[101. 对称二叉树](#101. 对称二叉树)
[100. 相同的树](#100. 相同的树)
[572. 另一棵树的子树](#572. 另一棵树的子树)
[104. 二叉树的最大深度](#104. 二叉树的最大深度)
[559. N 叉树的最大深度](#559. N 叉树的最大深度)
[111. 二叉树的最小深度](#111. 二叉树的最小深度)
226. 翻转二叉树
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root){
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->right);
}
return root;
}
};
101. 对称二叉树
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
* right(right) {}
* };
*/
class Solution {
bool com(TreeNode* left, TreeNode* right) {
if (!left && right)return false;
else if (left && !right)return false;
else if (!left && !right)return true;
else if(left->val!=right->val)return false;
else return com(left->left,right->right)&&com(left->right,right->left);
}
public:
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return com(root->left,root->right);
}
};
100. 相同的树
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(!p&&!q)return true;
else if(!p||!q)return false;
if(p->val!=q->val)return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
};
572. 另一棵树的子树
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
* right(right) {}
* };
*/
class Solution {
bool isSameTree(TreeNode* p, TreeNode* q) {
if (!p || !q ) return p == q;
return p->val == q->val && isSameTree(p->left, q->left) &&isSameTree(p->right, q->right);
}
public:
bool isSubtree(TreeNode* root, TreeNode* subRoot) {
if (!root) return false;
return isSameTree(root, subRoot) || isSubtree(root->left, subRoot) ||
isSubtree(root->right, subRoot);
}
};
104. 二叉树的最大深度
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth(TreeNode* root) {
if(!root)return 0;
int left=maxDepth(root->left);
int right=maxDepth(root->right);
return max(left,right)+1;
}
};
559. N 叉树的最大深度
cpp
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> children;
Node() {}
Node(int _val) {
val = _val;
}
Node(int _val, vector<Node*> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public:
int maxDepth(Node* root) {
if(!root)return 0;
int deep=0;
vector<Node*>c=root->children;
for(auto child : c){
int childdeep=maxDepth(child);
deep=max(deep,childdeep);
}
return deep+1;
}
};
111. 二叉树的最小深度
cpp
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
if(!root)return 0;
if(!root->left&&!root->right)return 1;
int deep=INT_MAX;
if(root->left)deep=min(minDepth(root->left),deep);
if(root->right)deep=min(minDepth(root->right),deep);
return deep+1;
}
};
