用C语言建立一个二叉树并遍历并计算二叉树高度
时间: 2024-05-08 22:18:49 浏览: 86
好的,我知道您的要求,下面是回答您的问题:
要用C语言建立一个二叉树,我们可以定义一个结构体来表示节点,包含该节点的值、左子树和右子树指针:
```
typedef struct TreeNode {
int value;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
```
然后我们可以定义一个函数来创建二叉树,输入一个整型数组和数组长度,返回二叉树的根节点指针:
```
TreeNode* createTree(int arr[], int len) {
if (len <= 0) {
return NULL;
}
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->value = arr[0];
node->left = createTree(arr+1, len/2);
node->right = createTree(arr+(len/2)+1, len-(len/2)-1);
return node;
}
```
这里我们采用递归的方式,每次创建一个节点,将其值设为数组的第一个元素,然后将左子树设为数组前一半(如果长度为偶数,则取左边的一半),右子树设为数组后一半(如果长度为偶数,则取右边的一半)。
接下来我们可以定义一个函数来遍历二叉树。这里我们采用先序遍历,即先访问根节点,再遍历左子树,最后遍历右子树:
```
void preOrder(TreeNode *node) {
if (!node) {
return;
}
printf("%d ", node->value);
preOrder(node->left);
preOrder(node->right);
}
```
类似地,我们可以定义中序遍历和后序遍历函数。
最后,要计算二叉树的高度,可以采用递归方式计算左子树和右子树的高度,然后取较大值再加1,即为整个二叉树的高度:
```
int treeHeight(TreeNode *node) {
if (!node) {
return 0;
}
int leftHeight = treeHeight(node->left);
int rightHeight = treeHeight(node->right);
return leftHeight > rightHeight ? leftHeight+1 : rightHeight+1;
}
```
这样,我们就用C语言建立了一个二叉树并遍历并计算了二叉树高度。
阅读全文