说一下二叉树的遍历算法的代码实现
时间: 2023-06-08 13:06:14 浏览: 57
好的,以下是二叉树的三种遍历算法的代码实现:
1. 先序遍历(根-左-右):
void preorderTraversal(TreeNode* root) {
if(root == NULL) return;
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
2. 中序遍历(左-根-右):
void inorderTraversal(TreeNode* root) {
if(root == NULL) return;
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
3. 后序遍历(左-右-根):
void postorderTraversal(TreeNode* root) {
if(root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
以上是二叉树遍历算法的代码实现,希望能对您有所帮助。
相关问题
二叉树层次遍历算法代码实现c语言
以下是C语言实现二叉树层次遍历算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结点结构体
typedef struct node {
int data; // 结点数据
struct node *left; // 左子树结点指针
struct node *right; // 右子树结点指针
} Node, *Tree;
// 队列结构体
typedef struct queue {
Tree data; // 队列元素数据
struct queue *next; // 下一个队列元素指针
} Queue, *Stack;
// 初始化队列
void initQueue(Queue **queue) {
*queue = (Queue *) malloc(sizeof(Queue));
(*queue)->next = NULL;
}
// 判断队列是否为空
int isQueueEmpty(Queue *queue) {
return (queue->next == NULL);
}
// 入队
void enqueue(Queue *queue, Tree data) {
Queue *newNode = (Queue *) malloc(sizeof(Queue));
newNode->data = data;
newNode->next = NULL;
Queue *p = queue;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// 出队
Tree dequeue(Queue *queue) {
Queue *p = queue->next;
Tree data = p->data;
queue->next = p->next;
free(p);
return data;
}
// 二叉树层次遍历
void levelOrderTraversal(Tree tree) {
if (!tree) {
return;
}
Queue *queue;
initQueue(&queue);
enqueue(queue, tree);
while (!isQueueEmpty(queue)) {
Tree node = dequeue(queue);
printf("%d ", node->data);
if (node->left) {
enqueue(queue, node->left);
}
if (node->right) {
enqueue(queue, node->right);
}
}
}
// 测试代码
int main() {
// 构造二叉树
Tree tree = (Tree) malloc(sizeof(Node));
tree->data = 1;
tree->left = (Tree) malloc(sizeof(Node));
tree->left->data = 2;
tree->left->left = NULL;
tree->left->right = NULL;
tree->right = (Tree) malloc(sizeof(Node));
tree->right->data = 3;
tree->right->left = NULL;
tree->right->right = NULL;
tree->left->left = (Tree) malloc(sizeof(Node));
tree->left->left->data = 4;
tree->left->left->left = NULL;
tree->left->left->right = NULL;
tree->right->right = (Tree) malloc(sizeof(Node));
tree->right->right->data = 5;
tree->right->right->left = NULL;
tree->right->right->right = NULL;
// 层次遍历
levelOrderTraversal(tree);
return 0;
}
```
以上是一个基于队列实现的二叉树层次遍历算法的 C 语言示例代码。在该示例代码中,主要包括了初始化队列、判断队列是否为空、入队、出队等队列操作函数,以及二叉树层次遍历函数 levelOrderTraversal。在 levelOrderTraversal 函数中,我们首先将根节点入队,然后进行循环遍历,每次出队一个结点,并将该结点的左右子树入队,直到队列为空为止,期间找到的各个结点就是二叉树的层次遍历结果。
二叉树遍历算法流程图
很抱歉,根据提供的引用内容,没有找到关于二叉树遍历算法的流程图。然而,我可以为您提供一种常见的二叉树遍历算法的一般流程。二叉树遍历算法主要有三种:前序遍历、中序遍历和后序遍历。
前序遍历算法的一般流程如下:
1. 如果二叉树为空,则返回。
2. 访问根节点。
3. 递归遍历左子树。
4. 递归遍历右子树。
中序遍历算法的一般流程如下:
1. 如果二叉树为空,则返回。
2. 递归遍历左子树。
3. 访问根节点。
4. 递归遍历右子树。
后序遍历算法的一般流程如下:
1. 如果二叉树为空,则返回。
2. 递归遍历左子树。
3. 递归遍历右子树。
4. 访问根节点。
这些算法可以通过递归或迭代的方式来实现,具体的实现细节可以参考提供的引用内容中的文章。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [讲透学烂二叉树(三):二叉树的遍历图解算法步骤及JS代码](https://blog.csdn.net/u012244479/article/details/119722175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)