如何用c语言创建一个排序二叉树
时间: 2023-03-14 19:53:15 浏览: 52
使用C语言来创建一个排序二叉树需要先创建一个根节点,然后把其他的节点插入到根节点的左右子树中,并且保证左子树的值小于根节点,右子树的值大于根节点。同时,对于每一个节点,都需要重复上述过程,来构建出一个排序二叉树。
相关问题
c语言清空排序二叉树
要清空排序二叉树(Binary Search Tree,BST),可以执行以下步骤:
1. 创建一个函数,用于删除二叉树的节点。函数可以使用递归来实现。
2. 在删除函数中,首先检查当前节点是否为空。如果为空,则返回。
3. 如果当前节点不为空,递归地调用删除函数来删除左子树和右子树。
4. 释放当前节点的内存。
5. 在主程序中,调用删除函数,传入根节点来清空整个二叉树。
以下是一个示例代码,用于清空排序二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
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;
}
// 删除二叉树节点
struct Node* deleteTree(struct Node* node) {
if (node == NULL) {
return NULL;
}
// 递归地删除左子树和右子树
node->left = deleteTree(node->left);
node->right = deleteTree(node->right);
// 释放当前节点的内存
free(node);
return NULL;
}
int main() {
struct Node* root = createNode(5);
root->left = createNode(3);
root->right = createNode(8);
root->left->left = createNode(2);
root->left->right = createNode(4);
root->right->left = createNode(6);
root->right->right = createNode(9);
// 清空二叉树
root = deleteTree(root);
if (root == NULL) {
printf("二叉树已清空\n");
} else {
printf("二叉树清空失败\n");
}
return 0;
}
```
上述代码中,我们创建了一个简单的排序二叉树,并使用 `deleteTree` 函数来清空它。最后,我们检查根节点是否为空来验证二叉树是否已经清空。
用C语言编写程序,创建二叉树,二叉树按链表方式存放,且树中结点关键字均不同,写一个判别该二叉树是否为二叉排序树的算法
以下是用C语言编写的判断二叉树是否为二叉排序树(BST)的算法,其基本思路是采用中序遍历二叉树,如果遍历的结果是按照升序排列的,则该二叉树为BST。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define true 1
#define false 0
//定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
//创建一颗二叉树
TreeNode *createTree() {
int val;
scanf("%d", &val);
if (val == -1) { //如果输入-1,则表示该节点为空
return NULL;
} else {
TreeNode *newNode = (TreeNode *)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = createTree();
newNode->right = createTree();
return newNode;
}
}
int prev = -65535; //记录前一个遍历的节点的值
//中序遍历二叉树,判断是否为BST
int isBST(TreeNode *root) {
if (root == NULL) {
return true;
}
//中序遍历左子树
if (!isBST(root->left)) {
return false;
}
//比较当前节点的值和前一个节点的值
if (root->val <= prev) {
return false;
}
prev = root->val;
//中序遍历右子树
if (!isBST(root->right)) {
return false;
}
return true;
}
int main() {
TreeNode *root = createTree();
if (isBST(root)) {
printf("这是一颗二叉排序树\n");
} else {
printf("这不是一颗二叉排序树\n");
}
return 0;
}
```
在主函数中,我们调用`createTree`函数创建一颗二叉树,然后调用`isBST`函数判断该二叉树是否为BST。`isBST`函数的实现采用了递归的方式进行中序遍历,具体实现如下:
1. 如果当前节点为空,则返回true。
2. 对当前节点的左子树进行中序遍历,如果返回false,则说明左子树不是BST,直接返回false。
3. 比较当前节点的值和前一个节点的值,如果当前节点的值小于等于前一个节点的值,则说明不满足BST的条件,直接返回false。
4. 记录当前节点的值为前一个遍历的节点的值。
5. 对当前节点的右子树进行中序遍历,如果返回false,则说明右子树不是BST,直接返回false。
6. 如果以上条件都不满足,则说明该二叉树是BST,返回true。
最后,我们输出判断的结果即可。