#include <iostream>
using namespace std;
class Node {//二叉树结点
public:
int m_value;//结点值
Node* m_left;//左子树
Node* m_right;//右子树
Node():m_left(nullptr),m_right(nullptr) {}
Node(int val):m_value(val),m_left(nullptr),m_right(nullptr) {}
~Node() {}
};
class Tree {//创建二叉树
public:
Node* m_root;//根节点
Tree():m_root(nullptr) {}
Tree(Node* t):m_root(t) {}
~Tree() {}
Node* Create(const int v[]);
};
Node* Tree::Create(const int v[])//创建二叉树然后把树的根结点返回
{
if (*v == 0)//没有树
{
return nullptr;
}
else
{
Node* root = new Node(*v);//新创建根结点
root->m_left = Create(++v);//创建左孩子
root->m_right = Create(++v);//创建右孩子
return root;
}
}
//
//递归--直接输出
void PreOderTree(Node* t)//前序遍历
{
if (t == nullptr) return;
else {
cout << t->m_value << " ";
PreOderTree(t->m_left);
PreOderTree(t->m_right);
}
}
void InOderTree(Node* t)//中序遍历
{
if (t == nullptr) return;
else {
InOderTree(t->m_left);//如果根不空了先遍历他的左子树
cout << t->m_value << " ";//左子树完了之后,把根的值输出一下
InOderTree(t->m_right);//完了再遍历他的右子树
}
}
void PreOderTree(Node* t)//后序遍历
{
if (t == nullptr) return;
else {
PreOderTree(t->m_left);
PreOderTree(t->m_right);
cout << t->m_value << " ";
}
}
int main()
{
Tree tree;
int v[] = {1,0,2,3};
Node* root = tree.Create(v);
InOderTree(root);
return 0;
}