2015-12-22 116 views
-1

我想打印一個二叉樹的左視圖,如在geeksforgeeks上看到的here。由於某種原因,它不起作用,我懷疑它與max_level有關。結果是[ 12, 10, 30, 25, 40 ],我期待[12,10,25]JavaScript實現打印二叉樹的左視圖返回不正確的結果

JS代碼

var Node = function(val) { 
    this.val = val; 
    this.left = this.right = null; 
}; 

var leftViewUtil = function(root, level, max, result) { 
    if (root === null) return; 

    if (max.level < level) { 
     max.level = level; 
     result.arr.push(root.val); 
    } 

    leftViewUtil(root.left, ++level, max, result); 
    leftViewUtil(root.right, ++level, max, result); 
}; 

var leftView = function(root) { 
    var result = { 
     arr: [] 
    }; 

    var max_level = {level: 0}; 

    leftViewUtil(root, 1, max_level, result); 

    return result.arr; 
}; 

root = new Node(12); 
root.left = new Node(10); 
root.right = new Node(30); 
root.right.left = new Node(25); 
root.right.right = new Node(40); 

var run = function() { 
    console.log(leftView(root)); 
}; 

run(); 
+1

當你轉換代碼,你不應該刪除評論:-) – Bergi

+0

謝謝你的提示! –

回答

1

鏈接頁面上的代碼之間的區別是

// Recur for left and right subtrees 
leftViewUtil(root->left, level+1, max_level); 
leftViewUtil(root->right, level+1, max_level); 

VS

leftViewUtil(root.left, ++level, max, result); 
leftViewUtil(root.right, ++level, max, result); 

您在這裏增加level兩次,而您應該將相同的值傳遞給遞歸調用。要麼使用level+1爲正確,還是做增量的調用之前:

++level; 
leftViewUtil(root.left, level, max, result); 
leftViewUtil(root.right, level, max, result);