513. Find the value in the lower left corner of the tree
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;
}
} ;
path sum
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;
}
} ;
Construct binary tree from inorder and postorder traversal sequences
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) ;
}
} ;