输出二叉树每一层的最右边节点

输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---

leetcode 第199题   https://leetcode-cn.com/problems/binary-tree-right-side-view/description/

主要思想:依据队列来实现层次遍历,依次将最右边的节点数据保留在数组中,现在的问题就是怎么判断是最右边的节点?

将根节点保存在队列中,然后取出来并在队列中删除该节点,这样队列就又为空了,

到第二层的时候也是一样的,当队列为空时,就把队列为空时的前一个节点的数据保留在数组中

/**
 * 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) {
        vector<int> result;
        if(root == nullptr)
            return result;
        queue<TreeNode *> bfs;  //用队列保存每一层的节点
        bfs.push(root);  //将根节点先入队列
        
        while(!bfs.empty())
        { 
            int len = bfs.size();  
            int data = 0;
            for(int i = 0; i < len;i++){
             
                TreeNode * tmp = bfs.front();
                bfs.pop();  //每取出一个节点就删除该节点,确保队列中保留的是每一层的节点数据
                data = tmp->val;

                if(tmp->left)
                    bfs.push(tmp->left);
                if(tmp->right)
                    bfs.push(tmp->right);
          }
          result.push_back(data);//依次将每层最右边的节点保留下来
        }
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/feixi7358/article/details/82492431