使用层次遍历法寻找一颗树左下角的值

513. 找树左下角的值

难度:中等

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

易错点

这个题注意一个容易错的地方:本题需要的左下角的值是指最后一行最左侧的叶节点的值,而不是单纯最左侧的值!!

例如对于下面的树来说,需要返回的值是7而不是4!

使用层次遍历法寻找一颗树左下角的值_第1张图片

所以以下代码是不行的:

TreeNode node = root;//根节点
while(node.left != null){
	node = node.left;
}
return node.left;

正确做法:

如果要寻找最后一行的元素,那么使用层次遍历法是非常简单就可以实现的。

基础的框架就是层次遍历法的框架

在每一次遍历时都记录最左侧的值,由于使用的数据结构是队列,因此需要记录的元素就是下一个出队的元素的值。

package cn.edu.xjtu.carlWay.tree.bottomLeftVal;

import cn.edu.xjtu.Util.TreeNode.TreeNode;

import java.util.Deque;
import java.util.LinkedList;

/**
 * 513. 找树左下角的值
 * 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
 * 

* 假设二叉树中至少有一个节点。 *

* https://leetcode-cn.com/problems/find-bottom-left-tree-value/ */ public class Solution { public int findBottomLeftValue(TreeNode root) { if (root == null) { return 0; } Deque<TreeNode> deque = new LinkedList<>(); deque.addLast(root); int leftVal = 0; while (!deque.isEmpty()) { leftVal = deque.peekFirst().val; int size = deque.size(); while (size > 0) { TreeNode node = deque.removeFirst(); if (node.left != null) { deque.addLast(node.left); } if (node.right != null) { deque.addLast(node.right); } size--; } } return leftVal; } }

你可能感兴趣的:(LeetCode,leetcode,数据结构,算法)