假设二叉树采用链接存储方式存储,分别编写一个二叉树先序遍历的递归 算法和非递归算法,用c语言实现 
时间: 2023-05-11 13:04:31 浏览: 55
好的,以下是二叉树先序遍历的递归算法和非递归算法的C语言实现:
递归算法:
```c
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
非递归算法:
```c
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
printf("%d ", node->val);
if (node->right != NULL) {
s.push(node->right);
}
if (node->left != NULL) {
s.push(node->left);
}
}
}
```
希望这个回答能够帮到你!
相关问题
二叉树采用链接存储方式存储,分别编写一个二叉树先序遍历的递归算法和非递归算法,用c语言实现
好的,以下是二叉树先序遍历的递归算法和非递归算法的C语言实现:
递归算法:
```c
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
void preorderTraversal(struct TreeNode* root){
if(root == NULL){
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
非递归算法:
```c
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
void preorderTraversal(struct TreeNode* root){
if(root == NULL){
return;
}
struct TreeNode* stack[1000];
int top = -1;
stack[++top] = root;
while(top >= 0){
struct TreeNode* node = stack[top--];
printf("%d ", node->val);
if(node->right != NULL){
stack[++top] = node->right;
}
if(node->left != NULL){
stack[++top] = node->left;
}
}
}
```
希望这个回答能够帮到你!
二叉树采用链接存储方式存储,分别编写一个二叉树先序遍历的递归算法和非递归算法,用c语言举例实现
递归算法:
```
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
```
非递归算法:
```
void preorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
printf("%d ", node->val);
if (node->right != NULL) {
s.push(node->right);
}
if (node->left != NULL) {
s.push(node->left);
}
}
}
```
其中,TreeNode 是二叉树节点的结构体,包含 val、left、right 三个成员变量。
相关推荐








