遍历二叉树的各种操作(转载的,真心觉得后序遍历用双栈法好简单啊)

本文介绍如何使用先序方法构建二叉树,并通过递归及非递归方式实现前序、中序、后序遍历。同时,还探讨了两种层次遍历方法:一种利用STL queue;另一种采用自定义数组队列。此外,文中还涉及求解二叉树深度和节点数量等实用操作。

    原文地址:http://blog.youkuaiyun.com/hackbuteer1/article/details/6583988

        先使用先序的方法建立一棵二叉树,然后分别使用递归与非递归的方法实现前序、中序、后序遍历二叉树,并使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队,还有两个操作就是求二叉树的深度、结点数。。。

在C语言中,创建二叉树、前序、中序和后序遍历通常涉及到结构体定义节点、递归函数以及主函数的编写。这里提供一个简化的例子,包括二叉树的基本结构和遍历函数。 首先,我们创建一个名为`binary_tree.h`的头文件: ```cpp // binary_tree.h #ifndef BINARY_TREE_H #define BINARY_TREE_H #include <stdio.h> // 定义二叉树节点结构 typedef struct TreeNode { int val; // 节点值 struct TreeNode *left; // 左子节点指针 struct TreeNode *right; // 右子节点指针 } TreeNode; // 创建新节点的函数 TreeNode* createNode(int value); // 前序遍历函数 void preOrderTraversal(TreeNode* root); // 中序遍历函数 void inOrderTraversal(TreeNode* root); // 后序遍历函数 void postOrderTraversal(TreeNode* root); #endif // BINARY_TREE_H ``` 接下来,我们创建`binary_tree.c`的源文件: ```cpp // binary_tree.c #include "binary_tree.h" // 创建新节点的函数 TreeNode* createNode(int value) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); if (newNode != NULL) { newNode->val = value; newNode->left = newNode->right = NULL; } return newNode; } // 前序遍历函数 void preOrderTraversal(TreeNode* root) { if (root != NULL) { printf("%d ", root->val); preOrderTraversal(root->left); preOrderTraversal(root->right); } } // 中序遍历函数 void inOrderTraversal(TreeNode* root) { if (root != NULL) { inOrderTraversal(root->left); printf("%d ", root->val); inOrderTraversal(root->right); } } // 后序遍历函数 void postOrderTraversal(TreeNode* root) { if (root != NULL) { postOrderTraversal(root->left); postOrderTraversal(root->right); printf("%d ", root->val); } } ``` 在主程序中,你可以像这样使用这些函数: ```cpp int main() { // 初始化树并调用遍历函数 TreeNode* root = createNode(1); root->left = createNode(2); root->right = createNode(3); // ...继续添加更多节点... printf("前序遍历: "); preOrderTraversal(root); printf("\n"); printf("中序遍历: "); inOrderTraversal(root); printf("\n"); printf("后序遍历: "); postOrderTraversal(root); printf("\n"); return 0; } ``` 这只是一个基础的示例,实际应用中可能需要处理更复杂的情况,比如用户输入创建树、删除节点等操作。现在你已经得到了前序、中序和后序遍历的基础框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值