二叉树的遍历

本文介绍了二叉树的遍历方法,包括递归和非递归两种方式。尽管两者时间复杂度相同为O(n),但非递归算法在空间复杂度上具有优势。代码参考自邓俊辉老师的教材。
摘要由CSDN通过智能技术生成

二叉树的遍历分为递归和非递归。渐进的时间复杂度都是O(n),非递归算法由于没有函数递归调用的开销,有比较好的空间复杂度。

代码是根据邓俊辉老师的书来写的。

代码:

//traverse a binary tree in recursive or non recursive way
#include <iostream>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>

using std::cin;
using std::cout;
using std::endl;
using std::cerr;
using std::stack;
using std::queue;

#define BinNodePosi(T) BinNode<T>*
#define IsRoot(x) (!(x).parent)
#define HasLChild(x) ((x).lc)
#define HasRChild(x) ((x).rc)
#define IsLChild(x) (!IsRoot(x)&&(&(x)==(x).parent->lc))
#define IsRChild(x) (!IsRoot(x)&&(&(x)==(x).parent->rc))

template <typename T>
void visit(T t)
{
	cout<<t<<" "<<endl;
}

template <typename T> class BinNode
{
public:
	T data;
	BinNodePosi(T) parent;
	BinNodePosi(T) lc;
	BinNodePosi(T) rc;
	int height;
	
	BinNode():parent(NULL),lc(NULL),rc(NULL),height(0){}
	BinNode(T e,BinNodePosi(T) p=NULL,BinNodePosi(T) lc=NULL,BinNodePosi(T) rc=NULL,int h=0):
	data(e),parent(p),lc(lc),rc(rc),height(h){}

	BinNodePosi(T) succ();
	
	template <typename VST> 
	void travPost(VST &visit)
	{
		travPost_I(this,visit);
	}

	template <typename VST>
	void travPre(VST &visit)
	{
		travPre_I(this,visit);
	}

	template <typename VST>
	void travIn(VST &visit)
	{
		srand(time(NULL));
		switch(rand()%2)
		{
			case 0:
				cout<<"(use a stack)"<<endl;
				travIn_I(this,visit);
				break;
			case 1:
				cout<<"(not use a stack)"<<endl;
				tra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值