给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <--- / \ 2 3 <--- \ \ 5 4 <---
解题思路:
层次遍历。每一层找最右边的结点即可,如果是在作出也可以找每一层的第一个结点。算法的复杂度为O(n)。
| class Solution { public: vector<int> rightSideView(TreeNode* root) { vector<int> res; //层次遍历,每次取最右端的元素 queue<TreeNode*> Q; if(root) Q.push(root); while (!Q.empty()) { int size = Q.size();//查找第size个元素 TreeNode* temp; for (int i = 1; i <= size; i++) { temp = Q.front(); if(temp->left) Q.push(temp->left); if(temp->right) Q.push(temp->right); Q.pop(); if (i == size) res.push_back(temp->val);//如果是左侧,就改为i==1 } } return res; } }; |