用先根遍历法,找树中值最大的结点C语言
时间: 2023-09-30 09:10:57 浏览: 90
实现代码如下:
```
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
// 定义先根遍历函数
void preorder(TreeNode* root, int* maxVal) {
if (root == NULL) {
return;
}
// 对比当前结点值和最大值,如果大于则更新最大值
if (root->val > *maxVal) {
*maxVal = root->val;
}
// 递归遍历左子树
preorder(root->left, maxVal);
// 递归遍历右子树
preorder(root->right, maxVal);
}
// 找树中值最大的结点
int findMaxNode(TreeNode* root) {
if (root == NULL) {
return -1;
}
// 初始化最大值为根结点的值
int maxVal = root->val;
// 先根遍历查找最大值
preorder(root, &maxVal);
return maxVal;
}
```
调用函数 `findMaxNode`,传入根结点即可找到树中值最大的结点。
相关问题
从二叉搜索树的根结点一直沿右儿子向下找不一定能找到树中值最大的结点。
这是正确的。二叉搜索树的特点是,对于每个结点,其左子树中的所有结点的值都小于该结点的值,而其右子树中的所有结点的值都大于该结点的值。因此,从根结点开始一直沿右儿子向下找,会找到最右边的结点,但不一定是树中值最大的结点。因为在左子树中可能存在比该结点的值更大的结点。要找到树中值最大的结点,需要一直沿右儿子向下找到最右边的叶子结点。
找出二叉树中值最大的结点,用C语言代码写
在二叉搜索树中查找最大值节点通常相对直接,因为二叉搜索树的性质保证了右子树的所有节点都比根节点大。以下是C语言的一个简单示例,假设我们有一个结构体`TreeNode`表示二叉树节点:
```c
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 定义一个函数来获取二叉树中的最大值节点
TreeNode* findMaxNode(TreeNode* root) {
if (root == NULL) { // 如果根节点为空,返回NULL
return NULL;
} else if (root->right == NULL) { // 如果右子节点为空,当前节点就是最大值
return root;
} else { // 否则递归查找右子树的最大节点
return findMaxNode(root->right);
}
}
```
这个函数通过递归的方式遍历树,当找到右子节点为空的情况时,说明当前节点已经是最大值节点。
阅读全文