513. Find Bottom Left Tree Value
513.1 题目描述:
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.
513.2 解题思路:
思路一:使用队列。广度遍历,并记录每一层的个数。首先将root放入队列中,并获取最后一层最左边值result的初始值为root的val。进入队列不空的遍历,获取此时队列的大小size,即为第一层节点的个数。获取队列的front节点。result的值更新为当前层最左边的值,即为此时front的val。进入size–循环,保证将这一层的所有子节点都放入队列中,获取队列的front节点,并pop。将其子节点放入队列。内循环结束,表示该层处理结束,进入外循环,即下一层。遍历全部结束后,即最后一次result的更新即为最后一层最左边的值。
思路二:使用队列,广度遍历,中右左的顺序。首先将root放入队列中,并获取最后一层最左边值result的初始值为root的val。进入队列不空的遍历,获取队列的front节点,并pop。result的值更新为当前层最左边的值,即为此时front的val。将其子节点放入队列。遍历全部结束后,即最后一次result的更新即为最后一层最左边的值。
513.3 C++代码:
1、思路一代码(9ms):
class Solution142 {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*>q;
q.push(root);
int result = root->val;
while (!q.empty())
{
result = q.front()->val;
int size = q.size();
while (size--)
{
TreeNode *temp = q.front();
q.pop();
if (temp->left)
q.push(temp->left);
if (temp->right)
q.push(temp->right);
}
}
return result;
}
};
2、思路二代码(12ms)
class Solution142_1 {
public:
int findBottomLeftValue(TreeNode* root) {
queue<TreeNode*>q;
q.push(root);
int result = root->val;
while (!q.empty())
{
TreeNode *temp = q.front();
result = temp->val;
q.pop();
if (temp->right)
q.push(temp->right);
if (temp->left)
q.push(temp->left);
}
return result;
}
};
513.4 Python代码:
1、思路一代码(148ms)
class Solution(object):
def findBottomLeftValue(self, root):
"""
:type root: TreeNode
:rtype: int
"""
q=Queue.Queue()
q.put(root)
result=root.val
while q.empty()==False:
size=q.qsize()
temp=q.get()
result=temp.val
if temp.left!=None:
q.put(temp.left)
if temp.right!=None:
q.put(temp.right)
while size>1:
size-=1
temp=q.get()
if temp.left!=None:
q.put(temp.left)
if temp.right!=None:
q.put(temp.right)
return result
2、思路二代码(58ms)
class Solution1(object):
def findBottomLeftValue(self, root):
"""
:type root: TreeNode
:rtype: int
"""
q=[root]
for node in q:
q +=filter(None,[node.right,node.left])
return node.val