2016-08-30 2 views
0

バイナリツリーが与えられたら、ノードの値のinorderトラバーサルを返します。例えばなぜ私のinorder traverseはArrayListに追加するのに失敗しますが、正しい値を出力するのに成功していませんか?

:[ヌル1、2,3]バイナリツリーを考える 、 2/3 \リターン[1,3,2]。

は、ここに私のコードです:

/** 
* Definition for a binary tree node. 
* public class TreeNode { 
*  int val; 
*  TreeNode left; 
*  TreeNode right; 
*  TreeNode(int x) { val = x; } 
* } 
*/ 
public class Solution { 
    public List<Integer> inorderTraversal(TreeNode root) { 
     List<Integer> list = new ArrayList<Integer>(); 
     helper(root, list); 
     return list; 

    } 

    public void helper(TreeNode root, List<Integer> list){ 
     if (root == null){ 
      return; 
     } 
     if(root.left == null){ 
      System.out.println(root.val); 
      list.add(root.val); 
      inorderTraversal(root.right); 
     }else{ 
      inorderTraversal(root.left); 
      System.out.println(root.val); 
      list.add(root.val); 
      if (root.right != null){ 
       inorderTraversal(root.right); 
      } 
     } 
    } 
} 

印刷機能が正確である1,3,2を与えますが、リストはちょうど[1]

答えて

0

あなたはすべてのinorderTraversal機能で新しいのArrayListを宣言しているので返します。それをグローバル変数にしてみてください。 helperにあなたはこれがrecusriveを行うには奇妙な方法だが、とにかくあなたが失っているinorderTraversal

0

listinorderTraversalhelperから呼び出してください。どちらのあなたの方法は、あなただけの冗長な複雑さを書くことができます含まれても

helper(node, list); 

または

list.addAll(inorderTraversal(node)); 

inorderTraversal(node); 

を置き換える:

public void helper(TreeNode root, List<Integer> list) { 
    if (root == null) { 
     return; 
    } 
    helper(root.left, list); 
    System.out.println(root.val); 
    list.add(root.val); 
    helper(root.right, list);   
} 
0

helperであなたが持っているlistを渡す

List<Integer> list = new ArrayList<Integer>(); 

をインスタンス化inorderTraversalを呼び出しているためである

関連する問題