题解 | #二叉排序树#
二叉排序树
https://www.nowcoder.com/practice/b42cfd38923c4b72bde19b795e78bcb3
#include <stdio.h> #include <stdlib.h> // 定义二叉树节点结构 typedef struct Node { int data; struct Node* left; struct Node* right; } Node; // 创建新节点函数 Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->left = NULL; newNode->right = NULL; return newNode; } // 向二叉排序树插入节点函数 Node* insertNode(Node* root, int data) { if (root == NULL) { return createNode(data); } if (data < root->data) { root->left = insertNode(root->left, data); } else if (data > root->data) { root->right = insertNode(root->right, data); } return root; } // 前序遍历 void preOrder(Node* root) { if (root == NULL) { return; } printf("%d ", root->data); preOrder(root->left); preOrder(root->right); } // 中序遍历 void inOrder(Node* root) { if (root == NULL) { return; } inOrder(root->left); printf("%d ", root->data); inOrder(root->right); } // 后序遍历 void postOrder(Node* root) { if (root == NULL) { return; } postOrder(root->left); postOrder(root->right); printf("%d ", root->data); } int main() { int n; while (scanf("%d", &n) != EOF) { Node* root = NULL; int data; for (int i = 0; i < n; i++) { scanf("%d", &data); if (root == NULL) { root = createNode(data); } else { insertNode(root, data); } } // 遍历二叉排序树 preOrder(root); printf("\n"); inOrder(root); printf("\n"); postOrder(root); printf("\n"); } return 0; }