1. 程式人生 > 其它 >LeetCode - 513. 找樹左下角的值

LeetCode - 513. 找樹左下角的值

技術標籤:演算法leetcode二叉樹

題目

給定一個二叉樹,在樹的最後一行找到最左邊的值。

思路

BFS 同時記錄下當前行的最左邊的值,最終返回它。

複雜度分析

假設樹有 n 個節點。

  • 時間複雜度O(n),遍歷整棵樹。
  • 空間複雜度O(n),空間複雜度與整棵樹的節點數相關。

程式碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution { public int findBottomLeftValue(TreeNode root) { return bfs(root); } private int bfs(TreeNode root) { int leftVal = root.val; int thisLevelNums = 1; int nextLevelNums = 0; Queue<TreeNode> queue = new LinkedList<>();
queue.add(root); while (!queue.isEmpty()){ TreeNode node = queue.poll(); thisLevelNums --; if (node.left != null){ queue.offer(node.left); nextLevelNums ++; } if (node.right != null){ queue.
offer(node.right); nextLevelNums ++; } if (thisLevelNums == 0 && !queue.isEmpty()){ thisLevelNums = nextLevelNums; nextLevelNums = 0; leftVal = queue.element().val; } } return leftVal; } }