官網題目敘述:
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its level order traversal as:
[ [3], [9,20], [15,7] ]
先附上通關證明(感覺應該有更好的方法,歡迎分享給我..)
我的想法就是先找出Top to bottom 每一層所有的節點,一層一層的找下去,直到沒有下一層為止,然後把結果串起來。(十分無腦的做法?
然後把這個想法練習寫成 Js :
var levelOrder = function(root) { // 檢查輸入是否為空 if(root==null) return []; var start = []; var startArray = []; // 把Root放進Array然後開始跑我們的遞迴。 // startArray算是初始化最後result。 start.push(root); return letgo(start,startArray); }; var letgo = function(nodeArray , result){ var thislevel = []; var nextNodeArray = []; // 輪詢每一層所有的節點並且將值塞入thislevel的陣列。 // 順便準備好下一層要輪詢的節點。 for (var i = 0; i < nodeArray.length; i++) { thislevel.push(nodeArray[i].val); if(nodeArray[i].left!=null)nextNodeArray.push(nodeArray[i].left); if(nodeArray[i].right!=null)nextNodeArray.push(nodeArray[i].right); } result.push(thislevel); // 如果沒有下一層的節點就回傳結果,還有就繼續做遞回。 if(nextNodeArray.length<1)return result; return letgo(nextNodeArray,result); }
全站熱搜
留言列表