二叉树的结构如下所示,若输入的顺序为:352▲▲14▲▲▲7▲68▲▲9▲▲,其中▲表示结束符,程序中可用0表示。 1)请在计算机中用c++生成二叉链表。 2)请前序遍历该二叉树。 3)请输出该二叉树中的所有叶子节点。
时间: 2024-11-05 11:34:32 浏览: 13
二叉树的存储结构.ppt
首先,我们需要理解二叉链表是如何存储这种二叉树结构的。每个节点包含一个整数值(比如35、2等),以及指向左右子节点的指针。对于给定的输入序列,我们可以按照以下步骤创建二叉链表:
1) 创建二叉链表节点结构:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
2) 解析输入并构造二叉树:
```cpp
void buildTree(string input, int& index, TreeNode*& root) {
if (index >= input.size()) return;
TreeNode* node = new TreeNode(stoi(input[index++]));
while (index < input.size() && input[index] == '▲') {
index++;
}
if (index < input.size()) {
node->left = buildTree(input, index, nullptr);
}
if (index < input.size()) {
index++;
while (input[index] != '▲') index++; // 跳过右子节点的开始标志
node->right = buildTree(input, index, nullptr);
}
}
```
3) 前序遍历二叉树(根-左-右):
```cpp
void preOrderTraversal(TreeNode* root, vector<int>& result) {
if (root != nullptr) {
result.push_back(root->val);
preOrderTraversal(root->left, result);
preOrderTraversal(root->right, result);
}
}
```
4) 获取所有叶子节点:
```cpp
vector<TreeNode*> getLeaves(TreeNode* root) {
vector<TreeNode*> leaves;
if (root == nullptr) return leaves;
if (root->left == nullptr && root->right == nullptr) {
leaves.push_back(root);
}
if (root->left != nullptr) leaves += getLeaves(root->left);
if (root->right != nullptr) leaves += getLeaves(root->right);
return leaves;
}
```
现在你可以将上述代码整合到一个函数中,用于处理整个过程。
阅读全文