假设二叉树采用链接存储方式存储,分别编写一个二叉树先序遍历的递归 算法和非递归算法,用c语言实现
时间: 2023-05-13 17:05:02 浏览: 114
好的,以下是C语言实现的二叉树先序遍历的递归算法和非递归算法:
递归算法:
```c
void preorderTraversalRecursive(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversalRecursive(root->left);
preorderTraversalRecursive(root->right);
}
```
非递归算法:
```c
void preorderTraversalIterative(TreeNode* root) {
if (root == NULL) {
return;
}
Stack* stack = createStack();
push(stack, root);
while (!isEmpty(stack)) {
TreeNode* node = pop(stack);
printf("%d ", node->val);
if (node->right != NULL) {
push(stack, node->right);
}
if (node->left != NULL) {
push(stack, node->left);
}
}
destroyStack(stack);
}
```
其中,TreeNode是二叉树节点的结构体,Stack是栈的结构体,createStack()、push()、pop()、isEmpty()和destroyStack()是栈的相关操作函数。
阅读全文