本文主要解决问题
输入一个数组,按照层序遍历的方式生成二叉树。
实现树的前中后序遍历:递归方式,非递归方式,和morris遍历方式。
头文件(stdafx.h)
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件
#include <iostream>
#include <stack>
using namespace std;
二叉树类的定义(BiTree.h)
#ifndef BITREE_H_INCLUDE
#define BITREE_H_INCLUDE
#include "stdafx.h"
struct BiNode{
public:
int value;
BiNode *left, *right;
};
class BiTree{
private:
BiNode *root;
int *a;
int n; //二叉树节点个数
int start;
void Release(BiNode *root); //析构函数
BiNode *create(int *a, int n, int start); //生成树
void PreOrder_R(BiNode *root); //递归前序遍历
void InOrder_R(BiNode *root); //递归中序遍历
void PosOrder_R(BiNode *root); //递归后序遍历
void PreOrder(BiNode *root); //非递归前序遍历
void InOrder(BiNode *root); //非递归中序遍历
void PosOrder(BiNode *root); //非递归后序遍历
void morris(BiNode *root); //morris遍历
void morrisPre(BiNode *root); //morris前序遍历
void morrisIn(BiNode *root); //morris中序遍历
void morrisPos(BiNode *root); //morris后序遍历
public:
BiTree(){
root = nullptr; a = nullptr; n = 0; start = 0; } //构造函数
~BiTree(){
Release(root); } //析构函数
void CreateBiTree(int *a, int n); //生成树
void PreOrder_R(){
PreOrder_R(root); cout << endl; } //递归前序遍历
void InOrder_R(){
InOrder_R(root); cout << endl; } //递归中序遍历
void PosOrder_R(){
PosOrder_R(root); cout << endl; } //递归后序遍历
void PreOrder(){
PreOrder(root); cout << endl; } //非递归前序遍历
void InOrder(){
InOrder(root); cout << endl; } //非递归中序遍历
void PosOrder(){
PosOrder(root); cout << endl; } //非递归后序遍历
void morris(){
morris(root); cout << endl; } //morris遍历
void morrisPre(){
morrisPre(root); cout << endl; } //morris前序遍历
void morrisIn(){
morrisIn(root)