层次序列创建二叉树,输出先序序列、中序序列、后序序列,并输出叶子结点数,运用c++编写,且不用结构体
时间: 2023-12-08 09:27:44 浏览: 193
好的,下面是代码实现:
```
#include<iostream>
#include<stack>
using namespace std;
class BinaryTreeNode {
public:
int val;
BinaryTreeNode* left;
BinaryTreeNode* right;
BinaryTreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
void createBinaryTree(BinaryTreeNode*& root) {
int val;
cin >> val;
if (val == -1) {
root = nullptr;
return;
}
root = new BinaryTreeNode(val);
createBinaryTree(root->left);
createBinaryTree(root->right);
}
// 先序遍历
void preorderTraversal(BinaryTreeNode* root) {
if (root == nullptr) return;
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 中序遍历
void inorderTraversal(BinaryTreeNode* root) {
if (root == nullptr) return;
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
// 后序遍历
void postorderTraversal(BinaryTreeNode* root) {
if (root == nullptr) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
// 计算叶子结点数
int countLeafNodes(BinaryTreeNode* root) {
if (root == nullptr) return 0;
if (root->left == nullptr && root->right == nullptr) return 1;
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
int main() {
BinaryTreeNode* root;
createBinaryTree(root);
cout << "先序遍历:" << endl;
preorderTraversal(root);
cout << endl << "中序遍历:" << endl;
inorderTraversal(root);
cout << endl << "后序遍历:" << endl;
postorderTraversal(root);
cout << endl << "叶子结点数:" << countLeafNodes(root) << endl;
return 0;
}
```
使用方法:
- 输入层次序列创建二叉树,-1 表示空节点。
- 输出先序序列、中序序列、后序序列,以及叶子结点数。
希望能够帮到你!
阅读全文