LeetCode 102 이 진 트 리 의 층 차 를 옮 겨 다 니 기

2247 단어 LeetCode
102. 이 진 트 리 의 층 차 는 이 진 트 리 를 옮 겨 다 니 며 층 차 를 따라 옮 겨 다 니 는 노드 값 을 되 돌려 줍 니 다.(즉, 한 층 한 층 왼쪽 에서 오른쪽으로 모든 노드 를 방문 하 는 것).
  :
     : [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
         :
[
  [3],
  [9,20],
  [15,7]
]

방법 1: BFS 광범 위 한 검색 알고리즘 사고방식: 사실 이 문 제 는 BFS 로 한 층 한 층 옮 겨 다 니 라 는 뜻 입 니 다. BFS 로 할 수 있 습 니 다. 스 택 을 데이터 구조 로 판단 하고 for 순환 으로 스 택 의 크기 에 따라 각 층 의 수 를 제어 하고 좌우 의 것 을 스 택 에 넣 지만 코드 에 접근 하지 않 습 니 다.
public List> levelOrder(TreeNode root) {
        List> list = new ArrayList<>();
        if(root==null) return list;
		//      
        Queue queue = new LinkedList<>();
        queue.add(root);
		//      
        while(!queue.isEmpty()){
            int size=queue.size();
            List cur = new ArrayList<>();
			//      
            for (int i = 0; i 

방법 2: DFS 깊이 검색 알고리즘 사고: 이 문 제 는 DFS 로 검색 할 수 있 습 니 다. DFS 는 하 나 를 먼저 옮 겨 다 니 고 다른 하 나 를 가 야 하기 때문에 하나의 deep 층수 로 제어 해 야 합 니 다. Map 으로 deep 에 따라 List 집합 을 저장 하고 새로 쓴 함 수 를 재 귀적 으로 호출 하여 왼쪽 노드 와 오른쪽 노드 를 모두 방문 한 다음 에 map 를 list 로 변환 하여 돌아 가면 됩 니 다.
코드:
public static List> levelOrder(TreeNode root) {
        List> list = new ArrayList<>();
        if(root==null) return list;
        Map> map = new HashMap<>();
        Map> listMap = dfsOrder(root, map, 0);
        for (Map.Entry> listEntry:listMap.entrySet()){
            list.add(listEntry.getValue());
        }
        return list;
    }
    public static Map> dfsOrder(TreeNode node, Map> map, int deep){
        if(node==null) return map;
        if(map.size()());
        }
        List list = map.get(deep);
        list.add(node.val);
        map.put(deep,list);
		//  node        
        dfsOrder(node.left,map,deep+1);
        dfsOrder(node.right,map,deep+1);
        return map;
    }

좋은 웹페이지 즐겨찾기