编写程序实现二叉树的基本运算:创建二叉树、销毁二叉树、查找节点、求二叉树的高度、输出二叉树
时间: 2024-06-20 11:02:49 浏览: 12
编写程序实现二叉树的基本运算包括:
1. 创建二叉树:二叉树可以通过前序遍历、中序遍历或后序遍历的序列来创建,这里以前序遍历为例。具体方法是:先读入一个节点的值,如果该节点值不为0,则新建一个节点,并将读入的值赋给该节点;如果该节点值为0,则直接返回NULL。然后递归调用创建二叉树函数,分别创建该节点的左子树和右子树。
2. 销毁二叉树:递归地销毁左子树和右子树,并释放每个节点的内存空间,最后将根节点设置为NULL。
3. 查找节点:从根节点开始,如果当前节点的值等于查找值,则返回该节点;如果当前节点的值大于查找值,则递归地在左子树中查找;如果当前节点的值小于查找值,则递归地在右子树中查找。
4. 求二叉树的高度:递归地求左子树和右子树的高度,然后将其较大值加1即为整棵二叉树的高度。
5. 输出二叉树:可以通过前序遍历、中序遍历或后序遍历的方式输出二叉树。这里以前序遍历为例。具体方法是:先输出当前节点的值,然后递归地输出左子树和右子树。
相关问题
编写一个程序,btree.cpp实现二叉树的基本运算
btree.cpp实现了二叉树的基本运算,包括创建二叉树、查找节点、获取左右子节点、获取二叉树高度等操作。具体实现可以参考以下代码:
```cpp
#include <stdio.h>
#include "btree.h"
// 创建二叉树
void CreateBTNode(BTNode *&b, char *str) {
BTNode *St[MaxSize], *p = NULL;
int top = -1, k, j = 0;
char ch = str[j];
b = NULL;
while (ch != '\0') {
switch (ch) {
case '(':
top++;
St[top] = p;
k = 1;
break;
case ')':
top--;
break;
case ',':
k = 2;
break;
default:
p = (BTNode *) malloc(sizeof(BTNode));
p->data = ch;
p->lchild = p->rchild = NULL;
if (b == NULL) {
b = p;
} else {
switch (k) {
case 1:
St[top]->lchild = p;
break;
case 2:
St[top]->rchild = p;
break;
}
}
}
j++;
ch = str[j];
}
}
// 查找节点
T *FindNode(BTNode *b, T x) {
if (b == NULL) {
return NULL;
} else if (b->data == x) {
return &(b->data);
} else {
T *p;
p = FindNode(b->lchild, x);
if (p != NULL) {
return p;
} else {
return FindNode(b->rchild, x);
}
}
}
// 获取左子节点
T *LchildNode(BTNode *p) {
if (p != NULL && p->lchild != NULL) {
return &(p->lchild->data);
} else {
return NULL;
}
}
// 获取右子节点
T *RchildNode(BTNode *p) {
if (p != NULL && p->rchild != NULL) {
return &(p->rchild->data);
} else {
return NULL;
}
}
// 获取二叉树高度
int BTNodeHeight(BTNode *b) {
if (b == NULL) {
return 0;
} else {
int l = BTNodeHeight(b->lchild);
int r = BTNodeHeight(b->rchild);
return (l > r ? l : r) + 1;
}
}
```
设计一个C语言程序,要求实现创建二叉树,并实现二叉树的查找节点,插入节点,删除节点
好的,下面是一个简单的二叉树节点定义和实现二叉树的函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树节点定义
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建新的二叉树节点
struct TreeNode* createNode(int val) {
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 查找节点
struct TreeNode* search(struct TreeNode* root, int val) {
if (root == NULL || root->val == val) {
return root;
}
if (root->val > val) {
return search(root->left, val);
}
return search(root->right, val);
}
// 插入节点
struct TreeNode* insert(struct TreeNode* root, int val) {
if (root == NULL) {
return createNode(val);
}
if (root->val > val) {
root->left = insert(root->left, val);
} else {
root->right = insert(root->right, val);
}
return root;
}
// 删除节点
struct TreeNode* deleteNode(struct TreeNode* root, int val) {
if (root == NULL) {
return NULL;
}
if (root->val > val) {
root->left = deleteNode(root->left, val);
} else if (root->val < val) {
root->right = deleteNode(root->right, val);
} else {
// 找到了要删除的节点
if (root->left == NULL) {
struct TreeNode* temp = root->right;
free(root);
return temp;
} else if (root->right == NULL) {
struct TreeNode* temp = root->left;
free(root);
return temp;
}
struct TreeNode* temp = root->right;
while (temp->left != NULL) {
temp = temp->left;
}
root->val = temp->val;
root->right = deleteNode(root->right, temp->val);
}
return root;
}
```
这里的 `search` 函数实现了查找节点,`insert` 函数实现了插入节点,`deleteNode` 函数实现了删除节点。你可以根据需要在主函数中调用这些函数实现二叉树的操作。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)