c语言在黑白窗口显示二叉树,c语言二叉树基本操作
时间: 2023-08-10 16:07:24 浏览: 55
要在黑白窗口中显示二叉树,可以使用字符画来表示。具体实现方法可以通过递归遍历二叉树,将每个节点的值和位置转换成字符画的形式,然后输出到窗口中。
以下是C语言二叉树的基本操作:
1. 创建节点
```c
struct Node {
int data;
struct Node *left;
struct Node *right;
};
struct Node *createNode(int data) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
```
2. 插入节点
```c
struct Node *insertNode(struct Node *root, int data) {
if (root == NULL) {
return createNode(data);
}
if (data < root->data) {
root->left = insertNode(root->left, data);
} else {
root->right = insertNode(root->right, data);
}
return root;
}
```
3. 删除节点
```c
struct Node *deleteNode(struct Node *root, int data) {
if (root == NULL) {
return root;
}
if (data < root->data) {
root->left = deleteNode(root->left, data);
} else if (data > root->data) {
root->right = deleteNode(root->right, data);
} else {
if (root->left == NULL) {
struct Node *temp = root->right;
free(root);
return temp;
} else if (root->right == NULL) {
struct Node *temp = root->left;
free(root);
return temp;
}
struct Node *temp = findMinNode(root->right);
root->data = temp->data;
root->right = deleteNode(root->right, temp->data);
}
return root;
}
struct Node *findMinNode(struct Node *root) {
while (root->left != NULL) {
root = root->left;
}
return root;
}
```
4. 遍历节点
```c
void inOrderTraversal(struct Node *root) {
if (root != NULL) {
inOrderTraversal(root->left);
printf("%d ", root->data);
inOrderTraversal(root->right);
}
}
void preOrderTraversal(struct Node *root) {
if (root != NULL) {
printf("%d ", root->data);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
}
void postOrderTraversal(struct Node *root) {
if (root != NULL) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
printf("%d ", root->data);
}
}
```