Java 求解找树左下角的值
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解找树左下角的值相关的知识,希望对你有一定的参考价值。
一、题目
给定一个二叉树,在树的最后一行找到最左边的值
二、迭代分析
该题用层序遍历更为简单,只需要一个标志位,每次记录每一层最左边的值即可
这样最后一次赋的值,就为最后一层最左边的值
class Solution {
public int findBottomLeftValue(TreeNode root) {
if (root == null) {
return 0;
}
Deque<TreeNode> deque = new LinkedList<>();
deque.add(root);
int size;
int res = 0;
TreeNode node;
while (!deque.isEmpty()) {
size = deque.size();
//flag用来标志每一层的第一个节点
boolean flag = true;
while (size > 0) {
size--;
node = deque.poll();
//res记录每一层的第一个数字
if (flag) {
res = node.val;
flag = false;
}
if (node.left != null) {
deque.add(node.left);
}
if (node.right != null) {
deque.add(node.right);
}
}
}
return res;
}
}
三、递归分析
该题也可以使用递归解决
树左下角的值,只需要找到最后一层,然后记录最后一层最左边的值即可
采用先序遍历实现,类似:二叉树的所有路径
递归包含着回溯的思想
class Solution {
//记录最大的层树
int maxLen = Integer.MIN_VALUE;
//记录结果值
int res = 0;
public int findBottomLeftValue(TreeNode root) {
//初始0层
traversal(root, 0);
return res;
}
public void traversal(TreeNode root, int leftLen) {
if (root.left == null && root.right == null) {
if (leftLen > maxLen) {
maxLen = leftLen;
res = root.val;
}
return;
}
if (root.left != null) {
traversal(root.left, leftLen + 1);
}
if (root.right != null) {
traversal(root.right, leftLen + 1);
}
}
}
四、总结
该题使用迭代法更为简单
递归法,也需要记住这种思想
以上是关于Java 求解找树左下角的值的主要内容,如果未能解决你的问题,请参考以下文章