实现二叉树的建立,各种遍历操作以及树形输出
时间: 2023-06-01 18:02:13 浏览: 92
二叉树的建立:
二叉树的建立可以通过递归的方式来实现,具体步骤如下:
1. 创建一个二叉树节点结构体,包含左右子树指针和数据域。
2. 定义一个递归函数,用于创建二叉树。函数参数为一个指向二叉树节点的指针,通过引用传递的方式,可以修改指针的值。
3. 在递归函数中,首先读入节点的数据。
4. 如果数据为-1,表示该节点为空,将指针指向NULL。
5. 如果数据不为-1,创建一个新的节点,并将数据赋值给节点的数据域。
6. 递归调用函数,分别创建节点的左右子树。
7. 返回根节点的指针。
代码实现如下:
```c++
#include <iostream>
using namespace std;
struct TreeNode{
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int d):data(d),left(NULL),right(NULL){}
};
void createTree(TreeNode*& root){
int data;
cin >> data;
if(data == -1){
root = NULL;
}else{
root = new TreeNode(data);
createTree(root->left);
createTree(root->right);
}
}
void preOrder(TreeNode* root){
if(root == NULL) return;
cout << root->data << " ";
preOrder(root->left);
preOrder(root->right);
}
void inOrder(TreeNode* root){
if(root == NULL) return;
inOrder(root->left);
cout << root->data << " ";
inOrder(root->right);
}
void postOrder(TreeNode* root){
if(root == NULL) return;
postOrder(root->left);
postOrder(root->right);
cout << root->data << " ";
}
void printTree(TreeNode* root, int indent){
if(root == NULL) return;
printTree(root->right, indent+4);
cout << setw(indent) << root->data << endl;
printTree(root->left, indent+4);
}
int main(){
TreeNode* root;
createTree(root);
cout << "preOrder: ";
preOrder(root);
cout << endl;
cout << "inOrder: ";
inOrder(root);
cout << endl;
cout << "postOrder: ";
postOrder(root);
cout << endl;
cout << "printTree:" << endl;
printTree(root, 0);
return 0;
}
```
输入样例:
```
1 2 -1 -1 3 4 -1 -1 5 -1 -1
```
输出样例:
```
preOrder: 1 2 3 4 5
inOrder: 2 1 4 3 5
postOrder: 2 4 5 3 1
printTree:
5
1
4
2
3
```
阅读全文