问题描述:
Given a binary tree, find the leftmost value in the last row of the tree.
Example 1:
Input:
2
/ \
1 3
Output:
1
Example 2:
Input:
1
/ \
2 3
/ / \
4 5 6
/
7
Output:
7
Note: You may assume the tree (i.e., the given root node) is not NULL.
题目来自此处
解法思路:
这个解法的主要思路是创建一个新的队列level
用来存储节点所在树的层数,它跟层次遍历树节点的顺序同步。每次知道遍历到了新一层,可以直接只保存这一层第一个节点,那么层次遍历到了最后一层,就可以得到这层最左边的节点,即是整棵树Bottom Left Tree Node
。
int findBottomLeftValue(TreeNode* root) {
if(root == NULL) return 0;
TreeNode *bot_left;
queue<TreeNode*> tree;
queue<int> level;
level.push(1);
tree.push(root);
int m = 0;
while(!tree.empty()) {
int lvl = level.front();
if(tree.front()->left){
tree.push(tree.front()->left);
level.push(lvl+1);
}
if(tree.front()->right){
tree.push(tree.front()->right);
level.push(lvl+1);
}
if(lvl > m) {
m = lvl;
bot_left = tree.front();
}
level.pop();
tree.pop();
}
return bot_left->val;
}
算法的时间复杂度为
O(N)
,N为该二叉树的叶节点数目。