121. 二分木の右側面図
タイトルリンク
ソース:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/binary-tree-right-side-view
タイトルの説明
バイナリツリーが与えられた場合、その右側に立って、右側から見ることができるノード値を上から下に順番に返すことを想像してください。
例:
入力:[1,2,3、null、5、null、4]
出力:[
1、3、4 ] 説明:
1 <---
/ \
2 3 <---
\ \
5 4 <---
もっと難しい
BFSの幅優先トラバーサル
トピック分析
- バイナリツリーを格納するキューstrを定義し、チームに出入りする順序を記録し、ノードがキューに子ノードを記録したときに、キューからノードを削除します。
- 二分木の右端のノードarrを定義して保存します。
- バイナリツリーの右側から最初のノードを見ると、幅優先トラバーサルの最後の値になります。
- lenは、現在のレイヤーのノード数を記録するために使用されます。すべてのノードの子が記録されると、次のレイヤーのノードのトラバースを開始できます。
- arrを返します。
/ ** *バイナリツリーノードの定義。 *関数TreeNode(val){ * this.val = val; * this.left = this.right = null; *} * / / ** * @param {TreeNode}ルート * @return {number []} * / var rightSideView = function(root){ if(!root)return []; //二分木ノードを置くためのキューを定義します str = []; str.push(ルート); //右端のノードを記録します let arr = []; while(str.length){ //このレイヤーの最初のノードをキューに入れます arr.push(str [0] .val); //ノードの数 len = str.lengthとします。 //このレイヤーのすべてのノードをトラバースします while(len-){ //現在のノードに移動し、その子ノードをキュー(次のレイヤー)に入れ、ノードをデキューします letNode = str.shift(); //子ノードは右から左にチームに入ります if(lastNode.right)str.push(lastNode.right); if(lastNode.left)str.push(lastNode.left); } } arrを返します。 };