二叉树查找是否存在值为x的结点
时间: 2023-06-10 20:04:00 浏览: 99
二叉树查找是否存在值为x的结点的方法是先判断根节点是否为x,如果是,则返回True。如果不是,则分别在左子树和右子树中寻找是否有值为x的节点。如果左子树中找到,则返回True,否则在右子树中寻找。如果右子树中找到,则返回True,否则返回False。
相关问题
写出C语言代码在二叉树查找是否存在值为x的结点
当然,我可以为你提供代码。请看下面:
```
#include <stdio.h>
#include <stdlib.h>
struct node
{
int key;
struct node *left, *right;
};
// 创建新节点并返回
struct node* newNode(int item)
{
struct node* temp = (struct node*)malloc(sizeof(struct node));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
// 二叉树查找
struct node* search(struct node* root, int key)
{
if (root == NULL || root->key == key)
return root;
if (root->key < key)
return search(root->right, key);
return search(root->left, key);
}
// 插入节点
struct node* insert(struct node* node, int key)
{
if (node == NULL) return newNode(key);
if (key < node->key)
node->left = insert(node->left, key);
else if (key > node->key)
node->right = insert(node->right, key);
return node;
}
// 打印中序遍历结果
void inorder(struct node* root)
{
if (root != NULL)
{
inorder(root->left);
printf("%d ", root->key);
inorder(root->right);
}
}
// 主程序
int main()
{
struct node* root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 20);
insert(root, 40);
insert(root, 70);
insert(root, 60);
insert(root, 80);
printf("中序遍历结果:\n");
inorder(root);
printf("\n");
int x = 40;
struct node* result = search(root, x);
if(result)
{
printf("%d存在于二叉树中\n", x);
}
else
{
printf("%d不在二叉树中\n", x);
}
return 0;
}
```
这个代码基本上是一个二叉查找树的模板,它能够插入节点、进行中序遍历、查找特定节点。你可以将其中的节点值改为自己想要查找的值,修改一下就可以使用了。
写出C语言代码在二叉树查找是否存在值为x的结点,其中二叉树需要先序递归输入
好的,以下是根据您的要求编写的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
/* 定义二叉树结构体 */
typedef struct Node {
int data;
struct Node *left;
struct Node *right;
} Node;
/* 先序递归输入二叉树节点 */
void createBinaryTree(Node **root) {
int x;
scanf("%d", &x);
if (x == -1) {
*root = NULL;
} else {
*root = (Node*) malloc(sizeof(Node));
(*root)->data = x;
createBinaryTree(&((*root)->left));
createBinaryTree(&((*root)->right));
}
}
/* 二叉树查找 */
Node *search(Node *root, int x) {
if (root == NULL) {
return NULL;
}
if (root->data == x) {
return root;
}
Node *leftResult = search(root->left, x);
if (leftResult != NULL) {
return leftResult;
}
Node *rightResult = search(root->right, x);
if (rightResult != NULL) {
return rightResult;
}
return NULL;
}
/* 主函数 */
int main() {
Node *root;
printf("请输入先序递归序列(-1表示空节点):\n");
createBinaryTree(&root);
int x;
printf("请输入要查找的节点值x:");
scanf("%d", &x);
Node *result = search(root, x);
if (result != NULL) {
printf("找到了节点值为%d的节点!", x);
} else {
printf("未找到节点值为%d的节点!", x);
}
return 0;
}
```
希望能够帮助到您!
阅读全文