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.
题解:此题比较简单,是用来求一棵二叉树中最底层中最左边那个节点的值。我考虑先求出这棵树的树高,用递归算法来求解,得到树高后,再层次遍历,遍历到树高的那一层时,直接将最左边的那个节点输出即可。
public class findBottomLeftValue
{
public int findBottomLeftValue(TreeNode root)
{
int depth = getMaxDepth(root);
if(depth == 1)
return root.val;
Queue<TreeNode> queue = new LinkedList<>(); //层次遍历
queue.add(root);
int length = queue.size();
int height = 1;
int result = 0;
while(!queue.isEmpty())
{
boolean t = false;
while(length-- > 0)
{
TreeNode tmp = queue.poll();
if(height == depth)
{
result = tmp.val;
t = true;
break;
}
if(tmp.left != null)
queue.add(tmp.left);
if(tmp.right != null)
queue.add(tmp.right);
}
if(t == true)
break; //判断是不是最底层的最左边的那个节点
height += 1;
length = queue.size();
}
return result;
}
public int getMaxDepth(TreeNode root) //递归求树高
{
if(root == null)
return 0;
else
{
int left = getMaxDepth(root.left);
int right = getMaxDepth(root.right);
return 1 + Math.max(left,right);
}
}
}