Given the root
of a binary tree, return the leftmost value in the last row of the tree.
Example 1:
Input: root = [2,1,3] Output: 1
Example 2:
Input: root = [1,2,3,4,null,5,6,null,null,7] Output: 7
Constraints:
- The number of nodes in the tree is in the range
[1, 104]
. -231 <= Node.val <= 231 - 1
法一:递归(实例使用前序,中、后序都可以)
class Solution {
public:
int result;
int maxDepth=INT_MIN;
void traversal(TreeNode*root,int depth){
if(root->left==NULL && root->right==NULL){
if(depth>maxDepth){
//depth=maxDepth;
maxDepth=depth;
result=root->val;
}
return;
}
if(root->left){
traversal(root->left,depth+1);//包括回溯
}
if(root->right){
traversal(root->right,depth+1);
}
return;
}
int findBottomLeftValue(TreeNode* root) {
traversal(root,0);
return result;
}
};
注意:
1,更新的时候是更新maxDepth=Depth,不要写反
2,每次单层递归的时候,Depth+1,其中隐含的是回溯(depth++;treversal(root->left,depth);depth--)
法二:迭代(层序遍历)
class Solution {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*>que;
int result=0;
if(root!=NULL)que.push(root);
while(!que.empty()){
int size=que.size();
for(int i=0;i<size;i++){
TreeNode*node=que.front();
que.pop();
if(i==0)result=node->val;
if(node->left)que.push(node->left);
if(node->right)que.push(node->right);
}
}
return result;
}
};
注意:
result每次更新为每层的第一个元素,所以有条件(i==0)