【17】二叉樹的右檢視(LeetCode 199)
阿新 • • 發佈:2021-01-11
技術標籤:LeetCode刷題筆記二叉樹佇列演算法資料結構leetcode
問題描述
給定一棵二叉樹,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。
示例:
解題思路
因為是輸出每一層最右邊的節點值,一層一層搜尋,因此想到用寬度優先搜尋。具體思路:
藉助佇列來實現寬度優先搜尋,額外用一個n來記錄每一層加入到佇列中的節點個數。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
queue<TreeNode*> q;
vector<int> res;
int n=0;//用來記錄每一層加入了多少個節點
if(root!=NULL){
q.push(root);
n++;
}
while(!q.empty()){//每while尋魂一次就是一層
TreeNode* temp;//用來記錄隊頭節點
int i=0;//用來記錄這一次while迴圈push了多少個節點
for(int j=0;j<n;j++){//用for迴圈對該層中的n個節點進行依次遍歷
temp=q.front();
q.pop();
if(temp->left!=NULL){//一定按照從左到右的順序push節點,這樣for迴圈結束後的temp才是該層中的最右節點
q.push(temp->left);
i++ ;
}
if(temp->right!=NULL){
q.push(temp->right);
i++;
}
}
res.push_back(temp->val);//經過上面的for迴圈,此時的temp就是該層中最右邊的節點
n=i;//更新n的值
}
return res;
}
};
心得
今天的思路完全是自己想出來的,而且解題速度也有所提升,給自己點贊!
(明天開始到20號開始進入考試周,還會繼續每日一題,但會暫停部落格記錄)