Advertisement
sweet1cris

Untitled

Jan 9th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.52 KB | None | 0 0
  1. // version 1: BFS
  2. public class Solution {
  3.     public List<List<Integer>> levelOrder(TreeNode root) {
  4.         List result = new ArrayList();
  5.  
  6.         if (root == null) {
  7.             return result;
  8.         }
  9.  
  10.         Queue<TreeNode> queue = new LinkedList<TreeNode>();
  11.         queue.offer(root);
  12.  
  13.         while (!queue.isEmpty()) {
  14.             ArrayList<Integer> level = new ArrayList<Integer>();
  15.             int size = queue.size();
  16.             for (int i = 0; i < size; i++) {
  17.                 TreeNode head = queue.poll();
  18.                 level.add(head.val);
  19.                 if (head.left != null) {
  20.                     queue.offer(head.left);
  21.                 }
  22.                 if (head.right != null) {
  23.                     queue.offer(head.right);
  24.                 }
  25.             }
  26.             result.add(level);
  27.         }
  28.  
  29.         return result;
  30.     }
  31. }
  32.  
  33.  
  34. // version 2:  DFS
  35. public class Solution {
  36.     /**
  37.      * @param root: The root of binary tree.
  38.      * @return: Level order a list of lists of integer
  39.      */
  40.     public List<List<Integer>> levelOrder(TreeNode root) {
  41.         List<List<Integer>> results = new ArrayList<List<Integer>>();
  42.        
  43.         if (root == null) {
  44.             return results;
  45.         }
  46.        
  47.         int maxLevel = 0;
  48.         while (true) {
  49.             List<Integer> level = new ArrayList<Integer>();
  50.             dfs(root, level, 0, maxLevel);
  51.             if (level.size() == 0) {
  52.                 break;
  53.             }
  54.            
  55.             results.add(level);
  56.             maxLevel++;
  57.         }
  58.        
  59.         return results;
  60.     }
  61.    
  62.     private void dfs(TreeNode root,
  63.                      List<Integer> level,
  64.                      int curtLevel,
  65.                      int maxLevel) {
  66.         if (root == null || curtLevel > maxLevel) {
  67.             return;
  68.         }
  69.        
  70.         if (curtLevel == maxLevel) {
  71.             level.add(root.val);
  72.             return;
  73.         }
  74.        
  75.         dfs(root.left, level, curtLevel + 1, maxLevel);
  76.         dfs(root.right, level, curtLevel + 1, maxLevel);
  77.     }
  78. }
  79.  
  80.  
  81. // version 3: BFS. two queues
  82. public class Solution {
  83.     /**
  84.      * @param root: The root of binary tree.
  85.      * @return: Level order a list of lists of integer
  86.      */
  87.     public List<List<Integer>> levelOrder(TreeNode root) {
  88.         List<List<Integer>> result = new ArrayList<List<Integer>>();
  89.         if (root == null) {
  90.             return result;
  91.         }
  92.        
  93.         List<TreeNode> Q1 = new ArrayList<TreeNode>();
  94.         List<TreeNode> Q2 = new ArrayList<TreeNode>();
  95.  
  96.         Q1.add(root);
  97.         while (Q1.size() != 0) {
  98.             List<Integer> level = new ArrayList<Integer>();
  99.             Q2.clear();
  100.             for (int i = 0; i < Q1.size(); i++) {
  101.                 TreeNode node = Q1.get(i);
  102.                 level.add(node.val);
  103.                 if (node.left != null) {
  104.                     Q2.add(node.left);
  105.                 }
  106.                 if (node.right != null) {
  107.                     Q2.add(node.right);
  108.                 }
  109.             }
  110.            
  111.             // swap q1 and q2
  112.             List<TreeNode> temp = Q1;
  113.             Q1 = Q2;
  114.             Q2 = temp;
  115.            
  116.             // add to result
  117.             result.add(level);
  118.         }
  119.        
  120.         return result;
  121.     }
  122. }
  123.  
  124. // version 4: BFS, queue with dummy node
  125. public class Solution {
  126.     /**
  127.      * @param root: The root of binary tree.
  128.      * @return: Level order a list of lists of integer
  129.      */
  130.     public List<List<Integer>> levelOrder(TreeNode root) {
  131.         List<List<Integer>> result = new ArrayList<List<Integer>>();
  132.         if (root == null) {
  133.             return result;
  134.         }
  135.        
  136.         Queue<TreeNode> Q = new LinkedList<TreeNode>();
  137.         Q.offer(root);
  138.         Q.offer(null); // dummy node
  139.        
  140.         List<Integer> level = new ArrayList<Integer>();
  141.         while (!Q.isEmpty()) {
  142.             TreeNode node = Q.poll();
  143.             if (node == null) {
  144.                 if (level.size() == 0) {
  145.                     break;
  146.                 }
  147.                 result.add(level);
  148.                 level = new ArrayList<Integer>();
  149.                 Q.offer(null); // add a new dummy node
  150.                 continue;
  151.             }
  152.            
  153.             level.add(node.val);
  154.             if (node.left != null) {
  155.                 Q.offer(node.left);
  156.             }
  157.             if (node.right != null) {
  158.                 Q.offer(node.right);
  159.             }
  160.         }
  161.        
  162.         return result;
  163.     }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement