LeetCode Find Bottom Left Tree Value

来源:互联网 发布:汉唐香莎温泉会所js 编辑:程序博客网 时间:2024/05/29 19:58

Given a binary tree, find the leftmost value in the last row of the tree. 

Example 1:

Input:    2   / \  1   3Output:1

Example 2: 

Input:        1       / \      2   3     /   / \    4   5   6       /      7Output: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);        }    }}