513.找树左下角的值
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*>que;
int res;
que.push(root);
while(!que.empty()){
int size=que.size();
TreeNode*tmp= que.front();
res=tmp->val;
for(int i=0;i<size;i++){
tmp= que.front();
que.pop();
if(tmp->left)que.push(tmp->left);
if(tmp->right)que.push(tmp->right);
}
}
return res;
}
};
路径总和
class Solution {
int res=0;
void backing(int a,TreeNode*root,int targetSum){
if(root->left==nullptr&&root->right==nullptr&&a==targetSum){
res=1;
return ;
}
if(root->left==nullptr&&root->right==nullptr){
return ;
}
if(root->left!=nullptr){
backing(a+root->left->val,root->left,targetSum);
}
if(root->right!=nullptr){
backing(a+root->right->val,root->right,targetSum);
}
}
public:
bool hasPathSum(TreeNode* root, int targetSum) {
if(root==nullptr)return 0;
backing(root->val,root,targetSum);
return res;
}
};
从中序与后序遍历序列构造二叉树
Solution {
private:
TreeNode* traversal (vector<int>& inorder, vector<int>& postorder) {
if (postorder.size() == 0) return NULL;
int rootValue = postorder[postorder.size() - 1];
TreeNode* root = new TreeNode(rootValue);
if (postorder.size() == 1) return root;
int delimiterIndex;
for (delimiterIndex = 0; delimiterIndex < inorder.size(); delimiterIndex++) {
if (inorder[delimiterIndex] == rootValue) break;
}
vector<int> leftInorder(inorder.begin(), inorder.begin() + delimiterIndex);
vector<int> rightInorder(inorder.begin() + delimiterIndex + 1, inorder.end() );
postorder.resize(postorder.size() - 1);
vector<int> leftPostorder(postorder.begin(), postorder.begin() + leftInorder.size());
vector<int> rightPostorder(postorder.begin() + leftInorder.size(), postorder.end());
root->left = traversal(leftInorder, leftPostorder);
root->right = traversal(rightInorder, rightPostorder);
return root;
}
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if (inorder.size() == 0 || postorder.size() == 0) return NULL;
return traversal(inorder, postorder);
}
};