二叉树的前序后序遍历(递归+非递归)
由于笔者对C语言较为熟悉(
因为C语言简单),本文全篇使用C语言描述
二叉树(Binary Tree)是树形结构里一个较为重要的部分。而二叉树中有个老生常谈的话题:二叉树的遍历。
这边仅作简单介绍
前序遍历: 先访问根节点,再访问根的左子树,最后访问根的右子树;(根 -> 左 -> 右)
后序遍历: 先访问根的左子树,再访问根的右子树,最后访问根节点。(左 -> 右 -> 根)
假定二叉树结点的结构体定义如下:
struct TreeNode{
int value;
struct TreeNode *left;
struct TreeNode *right;
};
递归
递归算法较为简单,前序遍历和后序遍历的递归算法如下:
void preorderTraversal(struct TreeNode* root){
//前序遍历
if(root == NULL) return;
printf("%d ",root -> value);
preorderTraversal(root -> left);
preorderTraversal(root -> right);
}
void postorderTraversal(struct TreeNode* root){
//后序遍历
if(root ==