c语言先序遍历递归算法
时间: 2023-02-13 21:55:22 浏览: 97
c语言的先序遍历递归算法的基本框架如下:
```
void preorder(struct node *root) {
if (root != NULL) {
printf("%d ", root->data); // 访问根节点
preorder(root->left); // 递归访问左子树
preorder(root->right); // 递归访问右子树
}
}
```
上面的代码假设二叉树用的是一个带有左右子节点指针的结构体。在递归函数中,首先访问根节点,然后递归访问左子树,最后递归访问右子树。递归函数的结束条件是当前节点为空指针。
相关问题
先序遍历非递归算法c语言
先序遍历的非递归算法可以使用栈来实现。基本思想是先将根节点入栈,然后循环执行以下步骤:
1. 弹出栈顶节点,并访问该节点。
2. 如果该节点有右子节点,则将右子节点入栈。
3. 如果该节点有左子节点,则将左子节点入栈。
重复执行以上步骤,直到栈为空。以下是C语言代码实现:
```c
void PreorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
visit(node);
if (node->right != NULL) {
s.push(node->right);
}
if (node->left != NULL) {
s.push(node->left);
}
}
}
```
其中,visit(node)是用来访问节点的函数,可以根据需要进行修改。
c语言先序遍历二叉树
在C语言中,先序遍历二叉树通常采用递归的方式实现,它的顺序是根节点 -> 左子树 -> 右子树。以下是简单的先序遍历算法步骤:
1. 定义一个函数`void preorderTraversal(TreeNode* root)`,其中`TreeNode* root`表示当前节点。
2. 如果根节点不为空(`root != NULL`),则执行以下操作:
- 输出或访问当前节点的值(通常是打印或存储节点值)
- 调用`preorderTraversal(root->left)`,遍历左子树
- 调用`preorderTraversal(root->right)`,遍历右子树
下面是一个简单的C语言代码示例:
```c
#include <stdio.h>
// 假设我们有一个名为TreeNode的结构体,包含数据域data和指向左右子节点的指针left和right
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 先序遍历函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->data); // 访问根节点
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
}
// 测试
int main() {
TreeNode* tree = /* 初始化你的二叉树 */;
preorderTraversal(tree);
return 0;
}
```
阅读全文