找树左下角的值
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> que;
TreeNode* temp;
int answer;
int queSize;
que.push(root);
while(!que.empty()){
queSize = que.size();
answer = que.front()->val;
for(int i = 0; i < queSize; i++){
temp = que.front();
que.pop();
if(temp->left != nullptr) que.push(temp->left);
if(temp->right != nullptr) que.push(temp->right);
}
}
return answer;
}
};
257. 二叉树的所有路径 (优先掌握递归)
题目链接/文章讲解/视频讲解:代码随想录
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr) return false;
vector<int> valueSet;
return traversal(root, valueSet, targetSum);
}
bool traversal(TreeNode* cur, vector<int> &valueSet, const int &targetSum){
if(cur == nullptr) return false;
valueSet.push_back(cur->val);
if(cur->left == nullptr && cur->right ==nullptr){
int sum = 0;
for(int val : valueSet){
sum += val;
}
if(sum == targetSum) return true;
else return false;
}
bool leftRes = traversal(cur->left, valueSet, targetSum);
if(cur->left != nullptr) valueSet.pop_back();
if(leftRes) return true;
bool rightRes = traversal(cur->right, valueSet, targetSum);
if(cur->right != nullptr) valueSet.pop_back();
if(rightRes) return true;
return false;
}
};
从中序与后序遍历序列构造二叉树
题目链接/文章讲解/视频讲解:代码随想录
class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
TreeNode* root = traversal(inorder,postorder);
return root;
}
TreeNode* traversal(vector<int>& inorder, vector<int>& postorder){
if(postorder.empty()) return nullptr;
int rootValue = postorder[postorder.size() - 1];
TreeNode* root = new TreeNode(rootValue);
if (postorder.size() == 1) return root;
int inorderIndex = 0;
for(; inorderIndex < inorder.size(); inorderIndex++){
if(rootValue == inorder[inorderIndex]){
break;
}
}
vector<int> inorderL(inorder.begin(), inorder.begin() + inorderIndex);
vector<int> inorderR(inorder.begin() + inorderIndex + 1, inorder.end());
postorder.resize(postorder.size() - 1);
vector<int> postorderL(postorder.begin(), postorder.begin() + inorderL.size());
vector<int> postorderR(postorder.begin() + inorderL.size(), postorder.end());
root->left = traversal(inorderL,postorderL);
root->right = traversal(inorderR,postorderR);
return root;
}
};