程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode:Binary Tree Right Side View

leetcode:Binary Tree Right Side View

編輯:關於C++

一、 題目

給你一個二叉樹,假設幾就站在樹的後邊,那麼此時你就只能看到最右邊的節點了。

例如:

1 <---

/ \

2 3 <---

\ \

5 4 <---

返回值就是[1,3,4]

二、 分析

對於樹的遍歷,我們通常會使用DFS或BFS,這個題目其實同樣是遍歷,不過呢,我們只記錄下來每一行最右邊的節點即可。我第一個思路是每次只訪問右節點,但仔細一想,並不一定所有的都是這種情況的,例如或許最右邊的節點在左半部分的。馬上否定了這個思路,想想不管怎樣都得是要遍歷所有節點的,不過我們是按照變相的前序遍歷,即當前節點-右節點-左節點的順序,每次都將他們放進隊列,但是取的時候我們只記錄下第一個節點即可,其他的都釋放掉。

 

 

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    
    vector rightSideView(TreeNode *root) {
        vector res;
        if(root == NULL)
            return res;
        queue nQueue;
        TreeNode *node = root;
        nQueue.push(node);
        while(!nQueue.empty()){
            int size = nQueue.size();
            for(int i = 0; i < size; i++){
                node = nQueue.front();
                nQueue.pop();
                if(i == 0)
                    res.push_back(node->val);
                if(node->right)
                    nQueue.push(node->right);
                if(node->left)
                    nQueue.push(node->left);
            }
        }
        return res;
    }
};


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved