DSA学习笔记——二叉树之遍历(先序遍历)

和自甴很熟 提交于 2020-02-27 18:57:04

1、递归版

template <typename T, typename VST>
void travPre_R(BinNode<T>* x, VST& visit){
	if(!x)	return;
	visit(x->data);
	travPre_R(x->lc, visit);
	travPre_R(x->rc, visit);
}

2、迭代版

template <typename T, typename VST>
static void visitAlongLeftBranch(BinNode<T>* x, VST& visit, Stack<BinNode<T>*>& S){
	while(x){
		visit(x->data);
		S.push(x->rc);
		x = x->lc;
	}
}

//先序遍历迭代版版本2代码
template <typename T, typename VST>
void travPre_I2(BinNode<T>* x, VST& visit){
	Stack<BinNode<T>*> S;
	while(true){
		visitAlongLeftBranch(x, visit, S);
		if(S.empty()) break;
		x = S.pop();
	}
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!