leetcode 199二叉树的右视图
问题描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-right-side-view
C++代码实现
使用队列进行层次遍历,存储每层最右边结点。主要是学习c++中的队列和向量的使用。
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
vector<int> ans; // 声明一个整形向量存储结果
if (root == NULL) // 若树为空则返回
return ans;
queue<TreeNode* > q; // 使用队列存储每一层次的结点
q.push(root);
while(!q.empty())
{
queue<TreeNode* > qt; // 中间队列存储子结点
ans.push_back(q.back()->val); // 存储每层结点的最右边的值
while(!q.empty())
{
if (q.front()->left)
{
qt.push(q.front()->left);
}
if (q.front()->right)
{
qt.push(q.front()->right);
}
q.pop();
}
q = qt;
}
return ans;
}
};
python3代码实现
使用双向队列。主要是学习python3中双向队列的使用。
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
if not root:
return []
ans = []
queue = collections.deque()
queue.append(root)
while queue:
for i in range(len(queue)):
node = queue.popleft()
if node.left != None:
queue.append(node.left)
if node.right != None:
queue.append(node.right)
ans.append(node.val)
return ans