定义二叉链存储结构。 实现二叉树的建立(利用扩展先序序列建立二叉链表存储的二叉树)、二叉树的遍历、统计二叉树结点数、求二叉树高度、打印二叉树等操作。 编写一个测试主函数,建立如下二叉树,并测试所设计的算法。 利用c语言
时间: 2024-11-18 21:15:56 浏览: 1
建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数
在C语言中,我们可以定义二叉链表(Binary Search Tree, BST)的数据结构如下:
```c
// 定义二叉链表节点
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} TreeNode;
// 创建一个新的节点
TreeNode* newNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
if (!node) return NULL;
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 利用扩展先序序列建立二叉树
void buildTreeFromPreorder(int* preorder, int n) {
if (n == 0) return;
TreeNode* root = newNode(preorder[0]);
int i = 1;
while (i < n) {
if (preorder[i] < root->val)
root->left = buildTreeFromPreorder(&preorder[i], n - i);
else
root->right = buildTreeFromPreorder(&preorder[i + 1], n - i - 1);
i++;
}
return root;
}
// 二叉树遍历:前序遍历、中序遍历、后序遍历
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->val); // 假设你要在这里输出节点值
inorderTraversal(root->right);
}
```
阅读全文