https://leetcode.com/problems/find-bottom-left-tree-value/
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.
Please review for performance. Thanks
using System; using System.Collections.Generic; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace GraphsQuestions { /// <summary> /// https://leetcode.com/problems/find-bottom-left-tree-value/ /// </summary> [TestClass] public class FindBottomLeftTreeValue { //Input: // 2 // / \ // 1 3 [TestMethod] public void SmallTreeTest() { TreeNode root = new TreeNode(2); root.left = new TreeNode(1); root.right = new TreeNode(3); Assert.AreEqual(1, FindBottomLeftValue(root)); } //Input: // 1 // / \ // 2 3 // / / \ // 4 5 6 // / // 7 [TestMethod] public void BigTreeTest() { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.left.left = new TreeNode(4); root.right = new TreeNode(3); root.right.left = new TreeNode(5); root.right.right = new TreeNode(6); root.right.left.left = new TreeNode(7); Assert.AreEqual(7, FindBottomLeftValue(root)); } public int FindBottomLeftValue(TreeNode root) { if (root == null) { throw new NullReferenceException("root is empty"); } Queue<TreeNode> Q = new Queue<TreeNode>(); Q.Enqueue(root); int left = root.val; while (Q.Count > 0) { // we always push the left node first then we peek, so the first item is the most left //for the entire level of the tree int qSize = Q.Count; left = Q.Peek().val; for (int i = 0; i < qSize; i++) { var current = Q.Dequeue(); if (current.left != null) { Q.Enqueue(current.left); } if (current.right != null) { Q.Enqueue(current.right); } } } return left; } } /* Definition for a binary tree node.*/ public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; } } }