二叉树的c++实现及遍历(包括递归、非递归和morris遍历)

本文主要解决问题

输入一个数组,按照层序遍历的方式生成二叉树。
实现树的前中后序遍历:递归方式,非递归方式,和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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值