引言二叉树是一种重要的数据结构,在计算机科学中有着广泛的应用。C语言作为一种高效、灵活的编程语言,非常适合用于二叉树的实现。本文将详细介绍C语言中二叉树的输入技巧,帮助读者高效构建数据结构。一、二叉树...
二叉树是一种重要的数据结构,在计算机科学中有着广泛的应用。C语言作为一种高效、灵活的编程语言,非常适合用于二叉树的实现。本文将详细介绍C语言中二叉树的输入技巧,帮助读者高效构建数据结构。
二叉树是一种每个节点最多有两个子节点的树结构。通常,节点的左子节点称为左孩子,右子节点称为右孩子。
typedef struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right;
} TreeNode;递归方法是构建二叉树最常用的方法之一。以下是一个递归创建二叉树的示例:
TreeNode* createNode(int data) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); if (newNode == NULL) { printf("内存分配失败\n"); return NULL; } newNode->data = data; newNode->left = NULL; newNode->right = NULL; return newNode;
}
void insertNode(TreeNode* root, int data) { if (root == NULL) { root = createNode(data); return; } if (data < root->data) { insertNode(root->left, data); } else { insertNode(root->right, data); }
}非递归方法通常使用栈或队列来实现。以下是一个使用栈的非递归创建二叉树的示例:
#include
#include
typedef struct StackNode { TreeNode* treeNode; struct StackNode* next;
} StackNode;
typedef struct Stack { StackNode* top;
} Stack;
void push(Stack* stack, TreeNode* node) { StackNode* newNode = (StackNode*)malloc(sizeof(StackNode)); newNode->treeNode = node; newNode->next = stack->top; stack->top = newNode;
}
TreeNode* pop(Stack* stack) { if (stack->top == NULL) { return NULL; } StackNode* temp = stack->top; TreeNode* node = temp->treeNode; stack->top = stack->top->next; free(temp); return node;
}
int isEmpty(Stack* stack) { return stack->top == NULL;
}
TreeNode* createTree() { int data; printf("输入节点的值 (-1 表示空节点): "); scanf("%d", &data); if (data == -1) { return NULL; } TreeNode* root = createNode(data); Stack stack; stack.top = NULL; push(&stack, root); while (!isEmpty(&stack)) { TreeNode* node = pop(&stack); printf("输入%d的左子节点: ", node->data); scanf("%d", &data); if (data != -1) { node->left = createNode(data); push(&stack, node->left); } printf("输入%d的右子节点: ", node->data); scanf("%d", &data); if (data != -1) { node->right = createNode(data); push(&stack, node->right); } } return root;
} 本文介绍了C语言中二叉树的输入技巧,包括递归方法和非递归方法。通过学习这些技巧,读者可以高效地构建二叉树数据结构,为后续的算法实现打下坚实的基础。