题目:
实现递归的二叉树遍历(前序遍历 中序遍历 后序遍历)。
思路:
常规的二叉树遍历方式采用栈实现,比较容易实现,下面直接给出代码。
注:二叉树结点定义如下:
typedef int dataType;
struct Node
{
dataType val;
struct Node *left;
struct Node *right;
Node(dataType _val):
val(_val), left(NULL), right(NULL){}
};
/*************************递归实现*************************/
#include <iostream>
using namespace std;
typedef int dataType;
struct Node
{
dataType val;
struct Node *left;
struct Node *right;
Node(dataType _val):
val(_val), left(NULL), right(NULL){}
};
///递归方式遍历二叉树//
// 递归方式实现前序遍历 (根 -> 左 -> 右)
void preOrderTraverse(Node *head)
{
if (head == NULL)
{
return;
}
cout<<head->val<<" ";
preOrderTraverse(head->left);
preOrderTraverse(head->right);
}
// 递归方式实现中遍历 (左 -> 根 -> 右)
void InOrderTraverse(Node *head)
{
if (head == NULL)
{
return;
}
InOrderTraverse(head->left);
cout<<head->val<<" ";
InOrderTraverse(head->right);
}
// 递归方式实现中遍历 (左 -> 右 -> 根)
void PostOrderTraverse(Node *head)
{
if (head == NULL)
{
return;
}
PostOrderTraverse(head->left);
PostOrderTraverse(head->right);
cout<<head->val<<" ";
}
void buildBinTree(Node **head)
{
dataType _val;
cin>>_val;
if (_val == -1)
{
*head = NULL;
}
else
{
*head = (Node*)malloc(sizeof(Node));
(*head)->val = _val;
buildBinTree(&(*head)->left);
buildBinTree(&(*head)->right);
}
}
int main(void)
{
Node *head;
buildBinTree(&head);
cout<<"前序遍历序列为:";
preOrderTraverse(head);
cout<<endl;
cout<<"中序遍历序列为:";
InOrderTraverse(head);
cout<<endl;
cout<<"后序遍历序列为:";
PostOrderTraverse(head);
cout<<endl;
return 0;
}
/*************************递归实现 END*************************/
测试:
输入:
1 2 3 -1 -1 4 -1 -1 5 6 8 -1 -1 -1 7 -1 -1
输出:
前序遍历序列为:1 2 3 4 5 6 8 7
中序遍历序列为:3 2 4 1 8 6 5 7
后序遍历序列为:3 4 2 8 6 7 5 1