LeetCode 515. Find Largest Value in Each Tree Row

来源:互联网 发布:知著投资 编辑:程序博客网 时间:2024/06/15 15:24

1.题目

题意简而言之就是求一颗二叉树的每一层最大节点,并用集合的形式将其返回。

2.思路

我的想法比较愚笨,是将此二叉树中的每一个节点标记上其所在的层数,然后在按层次标记遍历所有节点得出每一层的最大节点。其中做层次标记的时候与找最大节点时候都是用的层次遍历。

3.代码


 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}class TreeNeuron{TreeNode t;int level;public TreeNeuron(TreeNode t,int level){this.t = t;this.level = level;}}    public List<Integer> largestValues(TreeNode root) {    List<Integer> listMax = new ArrayList<Integer>();    Queue<TreeNeuron> qIn = new LinkedList<TreeNeuron>();//为了确定每个节点所在层数的辅助队列    Queue<TreeNeuron> qOut = new LinkedList<TreeNeuron>();//最后比较输出的队列        if(root == null)    return listMax;        TreeNeuron tn = new TreeNeuron(root,1);    qIn.add(tn);//根节点入队    int k ;//表示临时的层数    while(!qIn.isEmpty()){    TreeNeuron temp = qIn.poll();//出队    qOut.add(temp);    k = temp.level;    if(temp.t.left != null)    qIn.add(new TreeNeuron(temp.t.left,k+1));        if(temp.t.right != null)    qIn.add(new TreeNeuron(temp.t.right,k+1));    }        k = 1;//k从第一层开始   TreeNeuron temp = qOut.poll();//出队    while(temp != null){        int max = Integer.MIN_VALUE;    while(temp!=null && temp.level==k){    if(max < temp.t.val)    max = temp.t.val;    temp = qOut.poll();    }    k++;    listMax.add(max);    }            return listMax;    }


原创粉丝点击