class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*> q; q.push(root);
int LeftVal = 0;
while (q.size())
{
int n = q.size();
for (int i = 0; i < n; i ++ )
{
TreeNode* t = q.front(); q.pop();
if (i == 0) LeftVal = t->val;
if (t->left) q.push(t->left);
if (t->right) q.push(t->right);
}
}
return LeftVal;
}
};
class Solution {
public:
bool check(TreeNode* node,int count)
{
if(!node->left&&!node->right)return count==node->val;
if(node->left&& check(node->left, count-node->val))return true;
if(node->right&& check(node->right,count-node->val))return true;
return false;
}
bool hasPathSum(TreeNode* root, int targetSum) {
if(!root)return false;
return check(root,targetSum);
}
};
106. 从中序与后序遍历序列构造二叉树 - 力扣(Leetcode)
class Solution {
public:
TreeNode* traversal(vector<int>&inorder,vector<int>&postorder)
{
if(postorder.size()==0)return NULL;
TreeNode*root=new TreeNode(postorder[postorder.size()-1]);
if(postorder.size()==1)return root;
int mid;
for(mid =0;mid<inorder.size();mid++)
{
if(inorder[mid]==postorder[postorder.size()-1])
{
break;
}
}
vector<int>leftinorder(inorder.begin(),inorder.begin()+mid);
vector<int>rightinorder(inorder.begin()+mid+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;
}
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(inorder.size()==0||postorder.size()==0)return NULL;
return traversal(inorder,postorder);
}
};