二叉树垂直顺序遍历中具有相同水平高度和相同垂直高度的元素的问题

问题描述

伪代码

  1. 创建了一个包含节点及其水平高度的类

  2. 使用BFS,因此创建一个队列并插入水平高度为0的第一个节点

  3. 从队列中放入元素,如果地图中不存在水平高度,则为其创建一个条目

  4. 获取水平高度的ArrayList并将节点的值添加到其中

  5. 检查左侧和右侧子级,如果它们不为null,则将其添加到队列中

    class Solution {
    
      class Node{
        TreeNode key;
        int h;
        Node(TreeNode key,int h){
            this.key=key;
            this.h=h;
          }
       }
    
    public List<List<Integer>> verticalTraversal(TreeNode root) {
        if(root==null)
            return null;
        TreeMap<Integer,ArrayList<Integer>> map = new TreeMap<>();
        Queue<Node> q=new LinkedList<>();
        q.add(new Node(root,0));
    
        while(!q.isEmpty()){
            Node tmp=q.poll();
            if(!map.containsKey(tmp.h))
                map.put(tmp.h,new ArrayList<Integer>());
            map.get(tmp.h).add(tmp.key.val);           
            if(tmp.key.left!=null)
                q.add(new Node(tmp.key.left,tmp.h-1));
            if(tmp.key.right!=null)
                q.add(new Node(tmp.key.right,tmp.h+1));
        }
    
        List<List<Integer>> ans=new ArrayList<>();
        for(ArrayList<Integer> al:map.values()){
            ans.add(al);
        }
        return ans;
    }
    

    }

问题 输入失败

输入: [0,2,1,3,null,null,null,4,5,null,7,6,null,10,8,11,9]

tree

enter image description here

解决方法

首先,您可能正在谈论水平高度,而不是输出所建议的垂直高度。您得到的输出似乎是正确的,因为在进行BFS遍历时,您首先在水平高度上独立地从左元素开始,然后从右到右查找元素。树级别的左节点将始终被更快地处理(因此,其子级也将被更快地添加到队列中),因此在级别3(从0到从下到下索引)处,值7的节点将被更快地添加到队列中进行处理然后是值6的节点。因此,在我眼中输出似乎是正确的,您能告诉我们为什么您期望获得不同的输出吗?

根据任务链接(https://leetcode.com/problems/vertical-order-traversal-of-a-binary-tree/)中的这句话:
“如果两个节点的位置相同,那么首先报告的节点的值就是较小的值。”

似乎您需要对结果列表中的子列表进行排序。您可以使用以下代码来做到这一点:

sortedResult = resultList.stream()
    .map(list -> list.stream().sorted().collect(Collectors.toList()))
    .collect(Collectors.toList());

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...