/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/classSolution{publicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<List<Integer>>();solver(result,root,0);returnresult;}voidsolver(List<List<Integer>>ans,TreeNoderoot,intlevel){if(root==null)return;List<Integer>l_level=null;if(ans.size()<=level){l_level=newArrayList<Integer>();ans.add(l_level);}else{l_level=ans.get(level);}l_level.add(root.val);if(root.left!=null){solver(ans,root.left,level+1);}if(root.right!=null){solver(ans,root.right,level+1);}}}
My Answer ( Iteration_1 )
반복문을 이용해서 해결
다음 Level의 node들을 next_nodes에 저장하고, while문에서는 next_nodes를 순회 돌면서, node들의 값을 결과 리스트에 추가 한다.
node의 left와 right가 null이 아니라면 다음 순회를 위해서 next_nodes 리스트에 추가 하기 위해, temp_nodes 리스트에 추가 한다.
next_nodes 순회가 끝나면, next_nodes를 비우고 temp_nodes의 내용을 next_nodes에 채운 후, temp_nodes도 비운다.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/classSolution{publicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<List<Integer>>();if(root==null){returnresult;}List<TreeNode>next_nodes=newArrayList<TreeNode>();//다음 Level의 Node들을 담고 있는 리스트List<TreeNode>temp_nodes=newArrayList<TreeNode>();//result 리스트에 Node의 값을 넣은 이후 다음 Level의 Node들을 담을 임시 리스트next_nodes.add(root);while(next_nodes.size()>0){//next_nodes의 원소 갯수가 0개 라는것은 다음 Level에 해당하는 Node가 없다는 의미List<Integer>sub_result=newArrayList<Integer>();for(TreeNodenode:next_nodes){sub_result.add(node.val);if(node.left!=null)temp_nodes.add(node.left);if(node.right!=null)temp_nodes.add(node.right);}next_nodes.clear();for(TreeNodenode:temp_nodes){next_nodes.add(node);}temp_nodes.clear();result.add(sub_result);}returnresult;}}
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/classSolution{publicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<List<Integer>>();if(root==null){returnresult;}Queue<TreeNode>q=newLinkedList<TreeNode>();q.add(root);while(q.size()>0){List<Integer>sub_result=newArrayList<Integer>();intn_size=q.size();for(intn=0;n<n_size;n++){TreeNodenode=q.poll();sub_result.add(node.val);if(node.left!=null)q.add(node.left);if(node.right!=null)q.add(node.right);}result.add(sub_result);}returnresult;}}