二叉树的创建与前中后序遍历

mac2024-02-21  48

#include <iostream> using namespace std; struct Node { int data; Node* right; Node* left; }; //二叉树的创建 Node* insert() { cout << "输入要插入的数字,以0结束:" << endl; int data; cin >> data; Node* root; root = (Node*)malloc(sizeof(Node)); root->right = NULL; root->left = NULL; root->data = NULL; if (data == 0) return root; else root->data = data; cin >> data; while (data != 0) { Node* p = root; //p->data = data; Node* q = p; while (p != NULL) { if (data > p->data) { q = p; p = q->right; } else if(data < p->data) { q = p; p = q->left; } else if (data == p->data) { break; } } Node* tmp; tmp = (Node*)malloc(sizeof(Node)); tmp->data = data; tmp->left = NULL; tmp->right = NULL; if (data > q->data) { q->right = tmp; } else if (data < q->data) { q->left = tmp; } //else if (data == q->data) //{ // cin >> data; // continue; //} cin >> data; } return root; } //二叉树的前序遍历 void PreOrderTree(Node* root) { Node* p = root; if (p != NULL) { cout << p->data << endl; PreOrderTree(p->left); PreOrderTree(p->right); } } //二叉树的中序遍历 void InOrderTree(Node* root) { Node* p = root; if (p != NULL) { InOrderTree(p->left); cout << p->data << endl; InOrderTree(p->right); } } //二叉树的后序遍历 void PostOrderTree(Node* root) { Node* p = root; if (p != NULL) { PostOrderTree(p->left); PostOrderTree(p->right); cout << p->data << endl; } } int main() { cout << "=======创建一个二叉树========" << endl; Node* root = insert(); cout << "=======二叉树的前序遍历========" << endl; PreOrderTree(root); cout << "=======二叉树的中序遍历========" << endl; InOrderTree(root); cout << "=======二叉树的后序遍历========" << endl; PostOrderTree(root); return 0; }

                         7

                  5            9

          6        4     8         10 

 

最新回复(0)