学习内容:
分别用递归和非递归实现二叉树的先序,中序,后序遍历。 以及层序遍历。
二叉树的创建
先序:头左右
中序:左头右
后序:左右头
层序:按层遍历
要点:
递归方式遍历时,先序是第一次进入函数就打印,先打印的是头结点然后再打印左节点和右节点。中序是第一次回到函数时打印,此时左节点已经打印,当前打印的是头结点,之后再打印右节点。后序是第二次回到函数时打印,此时左右节点都已打印,当前打印的是头结点。
层序遍历用队列实现,先将头结点压入队列,然后出队时打印,先压左再压右。
1
/ \
2 3
/ \ /
4 5 6
此树的递归序为:1,2,4,4,4,2,5,5,5,2,1,3,6,6,6,3,3,1
先序:1,2,4,5,3,6
中序:4,2,5,1,6,3
后序:4,5,2,6,3,1
层序:1,2,3,4,5,6
代码:
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
struct Node
{
int value;
Node *left;
Node *right;
Node() : value(0), left(nullptr), right(nullptr) {
}
Node(int x) : value(x), left(nullptr), right(nullptr) {
}
Node(int x, Node *left, Node *right) : value(x), left(left), right(right) {
}
};
/*
1
/ \
2 3
/ \ /
4 5 6
*/
void creatBitree(Node *&node) //传入指针的引用(根节点)
{
int in;
cout << "int put: ";
cin >> in; // 1 2 4 -1 -1 5 -1 -1 3 6 -1 -1 -1
if (in == -1)
{
node = nullptr;
}
else
{
node = new Node(in);
creatBitree