编写二叉树的递归遍历算法,实现:给定一颗二叉树的“扩展先序遍历序列”,创建这颗二叉树。 (1)输出二叉树的先序遍历的结点序列。 (2)输出二叉树的后序遍历的结点序列。 (3)输出二叉树的中序遍历的结点序列。 (4)输出二叉树的叶子结点。 (5)统计二叉树的结点个数。
时间: 2024-01-23 07:42:46 浏览: 71
二叉树的遍历算法(详细示例分析)
我们可以定义一个二叉树节点的结构体,并使用一个递归函数来实现对二叉树的遍历和构建。
以下是完整的代码实现:
```c++
#include<iostream>
#include<string>
using namespace std;
//定义二叉树节点结构体
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
//递归构建二叉树
TreeNode* buildTree(string& s, int& i) {
if (i >= s.length()) return NULL;
if (s[i] == '#') {
i++;
return NULL;
}
TreeNode* node = new TreeNode(s[i]);
i++;
node->left = buildTree(s, i);
node->right = buildTree(s, i);
return node;
}
//先序遍历
void preOrder(TreeNode* root) {
if (root == NULL) return;
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
//后序遍历
void postOrder(TreeNode* root) {
if (root == NULL) return;
postOrder(root->left);
postOrder(root->right);
cout << root->val << " ";
}
//中序遍历
void inOrder(TreeNode* root) {
if (root == NULL) return;
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
//输出叶子节点
void printLeaf(TreeNode* root) {
if (root == NULL) return;
if (root->left == NULL && root->right == NULL) cout << root->val << " ";
printLeaf(root->left);
printLeaf(root->right);
}
//统计节点个数
int countNode(TreeNode* root) {
if (root == NULL) return 0;
return countNode(root->left) + countNode(root->right) + 1;
}
int main() {
string s = "AB#D##CE##";
int i = 0;
TreeNode* root = buildTree(s, i);
cout << "先序遍历结果: ";
preOrder(root);
cout << endl;
cout << "后序遍历结果: ";
postOrder(root);
cout << endl;
cout << "中序遍历结果: ";
inOrder(root);
cout << endl;
cout << "叶子节点: ";
printLeaf(root);
cout << endl;
cout << "节点个数: " << countNode(root) << endl;
return 0;
}
```
输出结果为:
```
先序遍历结果: A B D C E
后序遍历结果: D B E C A
中序遍历结果: B D A E C
叶子节点: D E
节点个数: 5
```
阅读全文