2017-01-04 7 views
0

Я пытаюсь сделать обход заказа уровня и хочу передать это бинарного деревоКак создать двоичное дерево [3,9,20, null, null, 15,7], чтобы передать его методу levelOrder?

[3,9,20,null,null,15,7] 

в метод

public List<List<Integer>> levelOrder(TreeNode root) { 

Но это не работает.

TreeNode bt = [3,9,20,null,null,15,7]; 
    levelOrder(bt); 

Это метод levelOrder

public List<List<Integer>> levelOrder(TreeNode root) { 
    Queue<TreeNode> queue = new LinkedList<TreeNode>(); 
    List<List<Integer>> wrapList = new LinkedList<List<Integer>>(); 

    if(root == null) return wrapList; 

    queue.offer(root); 
    while(!queue.isEmpty()){ 
     int levelNum = queue.size(); 
     List<Integer> subList = new LinkedList<Integer>(); 
     for(int i=0; i<levelNum; i++) { 
      if(queue.peek().left != null) queue.offer(queue.peek().left); 
      if(queue.peek().right != null) queue.offer(queue.peek().right); 
      subList.add(queue.poll().val); 
     } 
     wrapList.add(subList); 
    } 
    return wrapList; 
} 

Это TreeNode

public class TreeNode { 
int val; 
TreeNode left; 
TreeNode right; 
TreeNode(int x) { val = x; } 
} 
+2

Можете ли вы показать нам 'метод levelOrder'? –

+0

Я обновил свой пост. – justcurious

+0

Когда вы говорите, что «это не работает», каков список, который был возвращен сейчас, в отличие от того, как должен выглядеть список? –

ответ

1

Вы должны создать все TreeNode, что вы хотите создать.

TreeNode bt = new TreeNode(3); 
TreeNode a = new TreeNode(9); 
TreeNode b = new TreeNode(20); 
TreeNode c = new TreeNode(15); 
TreeNode d = new TreeNode(7); 

bt.left = a; 
bt.right = b; 
bt.right.left = c; 
bt.right.right = d; 

В качестве альтернативы, вы можете сделать конструктор TreeNode, который принимает массив целых чисел и создает TreeNode соответствующим образом.

1

Надежда, Это поможет

public class TreeTest 
{ 
    public static void main(String[] args) 
    { 
     TreeNode tree = new TreeNode(3); 
     int[] nums = {9,20,5,8,15,7}; 
     for(int i : nums) { 
     tree.addNode(i); 
     } 

     System.out.println(TreeTest.levelOrder(tree)); 
    } 
    public static List<List<Integer>> levelOrder(TreeNode root) { 
     Queue<TreeNode> queue = new LinkedList<TreeNode>(); 
     List<List<Integer>> wrapList = new LinkedList<List<Integer>>(); 

     if(root == null) return wrapList; 

     queue.offer(root); 
     while(!queue.isEmpty()){ 
      int levelNum = queue.size(); 
      List<Integer> subList = new LinkedList<Integer>(); 
      for(int i=0; i<levelNum; i++) { 
       if(queue.peek().left != null) queue.offer(queue.peek().left); 
       if(queue.peek().right != null) queue.offer(queue.peek().right); 
       subList.add(queue.poll().val); 
      } 
      wrapList.add(subList); 
     } 
     return wrapList; 
    } 

} 
class TreeNode 
{ 
    int val; 
    TreeNode left; 
    TreeNode right; 
    TreeNode(int x) 
    {  
     val = x; 
     this.left = null; 
     this.right = null; 
    } 
    public void addNode(int num) 
    { 
     if (num < this.val) 
     { 
      if (this.left != null) 
       this.left.addNode(num); 
      else 
       this.left = new TreeNode(num); 
     } 
     else 
     { 
      if (this.right != null) 
       this.right.addNode(num); 
      else 
       this.right = new TreeNode(num);    
     } 
    } 
} 
+0

Спасибо. Я пробовал это, и я думаю, что должен внести некоторые изменения, чтобы он работал, когда я использую этот способ их добавления, он несколько раз печатает корни. – justcurious