给定一个二叉树二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的结点值.
时间: 2024-12-16 15:14:28 浏览: 3
这个问题要求我们遍历二叉树并按照特定的视角(右侧)输出节点值。在标准的二叉树遍历中,我们可以使用右前序遍历(Right Preorder Traversal),也称为后根遍历,因为我们首先访问的是当前节点的右子树,然后是左子树,最后是当前节点。
以下是一个简单的 C++ 实现,使用递归方法:
```cpp
#include <iostream>
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 右前序遍历函数
std::vector<int> rightView(TreeNode* root) {
std::vector<int> result;
if (root == nullptr) return result; // 如果树为空,直接返回空结果
// 递归过程:先处理右子树,然后是左子树,最后添加当前节点到结果列表
result.push_back(root->val);
std::vector<int> right_view = rightView(root->right);
std::vector<int> left_view = rightView(root->left);
// 返回的结果包括右子树中的所有节点值,然后是最右边的左子树节点值
for (int v : left_view) {
result.push_back(v);
}
return result;
}
int main() {
// 假设这里有一个已构建好的二叉树实例
TreeNode* tree = ...; // 替换为你的实际二叉树实例
std::vector<int> view = rightView(tree);
for (int v : view) {
std::cout << v << " ";
}
return 0;
}
```
在这个程序中,`rightView` 函数接收一个二叉树的根节点,然后按需递归地调用自身。最后,在主函数中,我们将得到的右侧视图打印出来。
阅读全文