
二叉树的中序遍历
class Solution {
vector<int> res;
public:
vector<int> inorderTraversal(TreeNode* root) {
dfs(root);
return res;
}
void dfs(TreeNode* root)
{
if (root == nullptr) return;
dfs(root->left);
res.push_back(root->val);
dfs(root->right);
}
};
二叉树的最大深度
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return left > right ? left + 1 : right + 1;
}
};
翻转二叉树
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
TreeNode *left = invertTree(root->left);
TreeNode *right = invertTree(root->right);
root->left = right;
root->right = left;
return root;
}
};
对称二叉树
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return dfs(root->left, root->right);
}
bool dfs(TreeNode* left, TreeNode* right)
{
if (left && right)
{
if (left->val != right->val) return false;
return dfs(left->left, right->right) && dfs(left->right, right->left);
}
else if (left != right) return false;
else return true;
}
};
二叉树的直径
class Solution {
int depth;
public:
int diameterOfBinaryTree(TreeNode* root) {
dfs(root);
return depth - 1;
}
int dfs(TreeNode* root)
{
if (root == nullptr) return 0;
int left = dfs(root->left);
int right = dfs(root->right);
depth = max(depth, left + right + 1);
return max(left, right) + 1;
}
};
二叉树的层序遍历
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> q;
if (root == nullptr) return res;
q.push(root);
while (q.size())
{
int sz = q.size();
vector<int> tmp;
while (sz--)
{
TreeNode *node = q.front();
tmp.push_back(node->val);
q.pop();
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
res.push_back(tmp);
}
return res;
}
};
将有序数组转换为二叉搜索树
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
return dfs(nums, 0, nums.size() - 1);
}
TreeNode* dfs(vector<int>& nums, int l, int r)
{
if (l > r) return nullptr;
int mid = l + (r - l) / 2;
TreeNode* node = new TreeNode(nums[mid]);
node->left = dfs(nums, l, mid - 1);
node->right = dfs(nums, mid + 1, r);
return node;
}
};
验证二叉搜索树
递归遍历。
class Solution {
public:
bool isValidBST(TreeNode* root) {
return dfs(root, LONG_MIN, LONG_MAX);
}
bool dfs(TreeNode* root, long min_val, long max_val)
{
if (root == nullptr) return true;
if (root->val <= min_val || root->val >= max_val) return false;
return dfs(root->left, min_val, root->val)
&& dfs(root->right, root->val, max_val);
}
};
前序遍历。
class Solution {
long prev = LONG_MIN;
public:
bool isValidBST(TreeNode* root) {
if (root == nullptr) return true;
if (isValidBST(root->left) == false) return false;
if (root->val <= prev) return false;
prev = root->val;
return isValidBST(root->right);
}
};
二叉搜索树中第 K 小的元素
class Solution {
int res, cnt;
public:
int kthSmallest(TreeNode* root, int k) {
cnt = k;
dfs(root);
return res;
}
void dfs(TreeNode* root)
{
if (root == nullptr) return;
dfs(root->left);
if (--cnt == 0)
{
res = root->val;
return;
}
dfs(root->right);
}
};
本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~
