写在前面
二叉树的三种遍历是数据结构与算法必须要回的知识,很多人光会理论而不懂代码的实现,或者自己很难亲自实现代码的编写。那么就需要好好思考为什么自己实现不了,是递归没写好还是对语言的不熟悉又或者是其他的原因呢?
三种遍历的简单概述
书上说的很清楚二叉树的遍历是如何实现的,那么我在这里就简单的说一下二叉树的先序遍历。先序遍历其实就是每次先访问一棵树的根节点,再接着访问根节点的左子树,再访问根节点的右子树,依次递归下去,每棵子树也有根节点和左右子树…
简答例题(请先手写出答案再看代码的具体实现)
代码的具体实现(C语言)
#include <iostream>
using namespace std;
typedef struct node
{
int data;
node* left;
node* right;
} Node;
//先序遍历
void preorder(Node* node)
{
if(node != NULL)
{
printf("%d ",node->data);
preorder(node->left);
preorder(node->right);
}
}
//中序遍历
void inorder(Node* node)
{
if(node != NULL)
{
inorder(node->left);
printf("%d ",node->data);
inorder(node->right);
}
}
//后序遍历
void postorder(Node* node)
{
if(node!= NULL)
{
postorder(node->left);
postorder(node->right);
printf("%d ",node->data);
}
}
int main()
{
Node n1,n2,n3,n4;
n1.data=5;
n1.left=&n2;
n1.right=&n3;
n2.data=7;
n2.left=NULL;
n2.right=NULL;
n3.data=2;
n3.left=&n4;
n3.right=NULL;
n4.data=9;
n4.left=NULL;
n4.right=NULL;
printf("先序遍历为:");
preorder(&n1);
printf("\n");
printf("中序遍历为:");
inorder(&n1);
printf("\n");
printf("后序遍历为:");
postorder(&n1);
printf("\n");
return 0;
}