精品推荐:
一网友因为自己是2硕,面试华为的时候审批不通过,吐槽化身华黑子了,让我感到很意外,这面试的是啥岗位,211硕士都不要了,难道只要9硕?结果一位9硕的网友说,因为自己本科是双非,现在也泡死了,还和他说机会不大,让他别吊死在华为。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第513题:找树左下角的值。
问题描述
来源:LeetCode第513题
难度:中等
给定一个二叉树的根节点 root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。
示例1:
输入: root = [2,1,3]
输出: 1
示例2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
二叉树的节点个数的范围是 [1,10^4]
-2^31 <= Node.val <= 2^31 - 1
问题分析
这题让计算二叉树最底层最左边的值,最简单的一种方式就是使用BFS,一层一层的遍历。一般情况下使用BFS我们习惯性的从左往右遍历,在这里我们要从右往左遍历,也就是先访问右子节点在访问左子节点,这样二叉树中最后一个访问的节点就是最底层最左边的值。
JAVA:
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
while (!q.isEmpty()) {
root = q.poll();
// 先访问右子节点,在访问左子节点
if (root.right != null)
q.add(root.right);
if (root.left != null)
q.add(root.left);
}
return root.val;
}
C++:
public:
int findBottomLeftValue(TreeNode *root) {
queue<TreeNode *> q;
q.push(root);
while (!q.empty()) {
root = q.front();
q.pop();
// 先访问右子节点,在访问左子节点
if (root->right)
q.push(root->right);
if (root->left)
q.push(root->left);
}
return root->val;
}
Python:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
q = deque()
q.append(root)
while q:
root = q.popleft()
# 先访问右子节点,在访问左子节点
if root.right:
q.append(root.right)
if root.left:
q.append(root.left)
return root.val
笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档。