C++(1).数据域为字符的一颗二叉树用前序遍历方式输入,创建一个采用二叉链表存储的二叉树,并按广义表的形式输出这颗二叉树。 (2).在(1)完成这颗二叉树的中序遍历的递归算法 (3).求二叉树的高度 (4).求二叉树的叶子个数
时间: 2024-11-18 11:14:42 浏览: 32
(1) 要根据前序遍历的方式创建并表示一颗二叉链表存储的二叉树,首先需要了解前序遍历的顺序通常是根节点 -> 左子树 -> 右子树。假设我们已有一个函数`inputPreorder()`接收前序遍历的结果,我们可以这样做:
```cpp
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char c) : val(c), left(nullptr), right(nullptr) {}
};
TreeNode* createBinaryTreeFromPreorder(const char* preorder) {
if (!preorder || *preorder == '\0') return nullptr;
TreeNode* root = new TreeNode(*preorder);
TreeNode* current = root;
for (char* p = strchr(preorder + 1, '('); p; p = strchr(p + 1, ')')) {
// 找到左子树结束的位置
char* endLeft = strchr(p, ')');
char* childVal = p + 1;
// 创建子节点并链接
TreeNode* left = createBinaryTreeFromPreorder(childVal);
current->left = left;
// 继续寻找右子树
current = left;
}
return root;
}
// 广义表形式输出就是按照层次结构打印节点值
void printGeneralizedList(TreeNode* root) {
if (!root) return;
std::stack<TreeNode*> nodes;
nodes.push(root);
while (!nodes.empty()) {
TreeNode* node = nodes.top();
nodes.pop();
std::cout << node->val;
if (node->right) nodes.push(node->right);
if (node->left) nodes.push(node->left);
}
std::cout << "\n";
}
```
阅读全文