515. Find Largest Value in Each Tree Row

来源:互联网 发布:linux server 版本 编辑:程序博客网 时间:2024/06/05 04:48

1.题目
  You need to find the largest value in each row of a binary tree.

Example:

Input:

      1     / \    3   2   / \   \    5   3   9 

Output: [1, 3, 9]

2.分析
  这道题,考察的是树形结构以及层次遍历,层次遍历因为要找出每一层的最大值,所以需要借助于相应的容器及其特性来实现。
3.解题
我的解法:

public List<Integer> largestValues(TreeNode root) {    ArrayList<Integer>list = new ArrayList<Integer>();    // 边界处理    if(root==null){        return list;    }    Stack<TreeNode>left = new Stack<>();    Stack<TreeNode>right = new Stack<>();    left.push(root);    while(!left.isEmpty()||!right.isEmpty()){        int num = Integer.MIN_VALUE;        while(!left.isEmpty()){            TreeNode node = left.pop();            if(node!=null&&node.left!=null){                right.push(node.left);            }            if(node!=null&&node.right!=null){                right.push(node.right);            }            if(node!=null&&node.val>num){                num = node.val;            }            if(left.isEmpty()){                list.add(num);                break;            }        }        num = Integer.MIN_VALUE;        while(!right.isEmpty()){            TreeNode node = right.pop();            if(node!=null&&node.left!=null){                left.push(node.left);            }            if(node!=null&&node.right!=null){                left.push(node.right);            }            if(node!=null&&node.val>num){                num = node.val;            }            if(right.isEmpty()){                list.add(num);                break;            }        }    }    return list;}

4.总结
  我的借助了容器栈,利用两个栈保存层次遍历的结果,并在遍历过程中找出每一层遍历的最大值进行保存,最后存储到list中。看了一下别人的解法,大同小异,但是是只采用了一个队列,利用队列先进先出的特性,并会在遍历之前,计算每一层的节点数,从而遍历找出每一层最大值予以保存输出。