找树左下角的值
思路
首先要找到最后一行,再找左下角。如果是递归的方法,只要遍历顺序,左在右的前面即可。
解题方法
首先要找到最后一行,再找左下角。如果是递归的方法,只要遍历顺序,左在右的前面即可。
Code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxDepth=INT_MIN;
int result;
void traversal(TreeNode*root,int depth)
{
if(root->left==NULL&&root->right==NULL)
{
if(depth>maxDepth)
{
maxDepth=depth;
result=root->val;
}
return;
}
if(root->left)
{
depth++;
traversal(root->left,depth);
depth--;
}
if(root->right)
{
depth++;
traversal(root->right,depth);
depth--;
}
return;
}
int findBottomLeftValue(TreeNode* root) {
traversal(root,0);
return result;
}
};
112. 路径总和
Code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
bool traversal(TreeNode*cur,int count)
{
if(!cur->left&&!cur->right&&count==0)return true;
if(!cur->left&&!cur->right)return false;
if(cur->left)
{
count-=cur->left->val;
if(traversal(cur->left,count))return true;
count+=cur->left->val;
}
if(cur->right)
{
count-=cur->right->val;
if(traversal(cur->right,count))return true;
count+=cur->right->val;
}
return false;
}
public:
bool hasPathSum(TreeNode* root, int targetSum)
{
if(root==NULL)return false;
return traversal(root,targetSum-root->val);
}
};
106.从中序与后序遍历序列构造二叉树
Code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
TreeNode*traversl(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=traversl(leftInorder,leftPostorder);
root->right=traversl(rightInorder,rightPostorder);
return root;
}
public:
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
if(inorder.size()==0||postorder.size()==0)return NULL;
return traversl(inorder,postorder);
}
};