如何使用C语言根据先序遍历序列构建一棵二叉树,并在找到特定节点后,获取其左孩子和右孩子的值?请提供相应的代码实现细节。
时间: 2024-12-14 22:20:10 浏览: 19
在C语言中,根据先序遍历序列构建二叉树并查找特定节点及其子节点的过程可以分为几个步骤:
1. 定义二叉树节点结构体:
```c
typedef struct TreeNode {
int val; // 节点值
struct TreeNode* left; // 左子节点指针
struct TreeNode* right; // 右子节点指针
} TreeNode;
```
2. 创建函数来根据先序遍历创建二叉树:
```c
TreeNode* buildTree(int* preorder, int n) {
if (n <= 0) return NULL;
TreeNode* root = malloc(sizeof(TreeNode)); // 根节点
root->val = preorder[0]; // 先序的第一个元素是根节点
// 找到剩余的先序序列对应的右子节点位置
int inOrderIndex = 1;
for (int i = 1; i < n && preorder[i] != root->val; ++i)
++inOrderIndex;
// 分别构造左右子树
root->left = buildTree(preorder + 1, inOrderIndex - 1);
root->right = buildTree(preorder + inOrderIndex, n - inOrderIndex);
return root;
}
```
3. 查找特定节点并获取其子节点值:
```c
TreeNode* findNode(TreeNode* root, int target) {
if (root == NULL || root->val == target) {
return root;
}
if (target < root->val) {
return findNode(root->left, target);
} else {
return findNode(root->right, target);
}
}
int getLeftChild(TreeNode* node) {
return node ? node->left->val : -1; // 如果找到节点,返回左孩子值,否则返回-1
}
int getRightChild(TreeNode* node) {
return node ? node->right->val : -1; // 如果找到节点,返回右孩子值,否则返回-1
}
```
要使用这些函数,首先调用`buildTree`创建二叉树,然后调用`findNode`找到特定节点,最后分别通过`getLeftChild`和`getRightChild`获取相应子节点的值。
阅读全文