PTA中序遍历树并判断是否为二叉搜索树C语言
时间: 2024-10-12 07:15:35 浏览: 40
在C语言中,为了在二叉搜索树(BST,Binary Search Tree)中使用前序遍历(Preorder Traversal),我们通常会先访问根节点,然后递归地对左子树和右子树进行同样的操作。对于中序遍历(Inorder Traversal),则先遍历左子树,再访问根节点,最后遍历右子树。这两个过程可以用来确定一棵树是否为二叉搜索树,因为按照BST的特性,左子树的所有节点值都小于根节点,右子树的所有节点值都大于根节点。
以下是一个简单的中序遍历函数,用于检查输入的数组是否表示一个有效的BST:
```c
#include <stdio.h>
// 定义二叉搜索树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 中序遍历函数
int inOrderTraversal(int arr[], int start, int end, TreeNode** root) {
if (root == NULL)
return 0;
// 如果当前节点有效,继续中序遍历它的左子树
if (arr[start] <= (*root)->val)
return inOrderTraversal(arr, start + 1, end, &(*root)->left);
// 访问根节点并将指针移到下一个元素
printf("%d ", arr[start]);
start++;
// 遍历右子树
return inOrderTraversal(arr, start, end, &(*root)->right);
}
// 判断给定数组是否构成BST
int isBST(int arr[], int n) {
TreeNode* root = NULL;
return inOrderTraversal(arr, 0, n - 1, &root) != 0;
}
int main() {
int arr[] = {5, 3, 6, 2, 4, 7};
int n = sizeof(arr) / sizeof(arr[0]);
if (isBST(arr, n))
printf("Yes, the array represents a BST.\n");
else
printf("No, the array does not represent a BST.\n");
return 0;
}
```
阅读全文