LeetCode513.找树左下角的值
class Solution {
public:
int maxDepth = INT_MIN;
int result;
void dfs(TreeNode* root, int depth){
if(root->left == nullptr && root->right == nullptr){
if(depth > maxDepth){
maxDepth = depth;
result = root->val;
return;
}
}
if(root->left){
dfs(root->left, depth + 1);
}
if(root->right){
dfs(root->right, depth + 1);
}
return;
}
int findBottomLeftValue(TreeNode* root) {
dfs(root, 0);
return result;
}
};
LeetCode112.路径总和
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr)return false;
if(root->left == nullptr && root->right == nullptr){
if(root->val == targetSum){
return true;
}
}
return hasPathSum(root->left, targetSum - root->val)||hasPathSum(root->right, targetSum - root->val);
}
};
LeetCode106.从中序与后续遍历构建二叉树
class Solution {
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if (postorder.size() == 0) return NULL;
int delimeterIndex;
int val;
for(int i = 0; i < inorder.size();i++){
if(inorder[i] == postorder[postorder.size() - 1]){
delimeterIndex = i;
val = inorder[i];
break;
}
}
TreeNode* root = new TreeNode(val);
vector<int> inorderLeft(inorder.begin(), inorder.begin() + delimeterIndex);
vector<int> inorderRight(inorder.begin() + delimeterIndex + 1, inorder.end());
postorder.pop_back();
vector<int> postorderLeft(postorder.begin(), postorder.begin() + delimeterIndex);
vector<int> postorderRight(postorder.begin() + delimeterIndex, postorder.end());
root->left = buildTree(inorderLeft, postorderLeft);
root->right = buildTree(inorderRight, postorderRight);
return root;
}
};