1. 程式人生 > 其它 >【17】二叉樹的右檢視(LeetCode 199)

【17】二叉樹的右檢視(LeetCode 199)

技術標籤: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號開始進入考試周,還會繼續每日一題,但會暫停部落格記錄)