DIY 二叉树的先序非递归遍历

来源:互联网 发布:长阳淘宝客服 编辑:程序博客网 时间:2024/06/01 07:57


DIY 二叉树的先序非递归遍历

在实现二叉树的非递归遍历的过程中,需要用到一个栈和一个队列;

定义一个bool型常量ok = true;当ok为true是,进入循环,定义指针p,指向根节点;

判断p有几个孩子 {

    如果有两个孩子,则入队;

    入栈;

    如果有一个孩子,判断是左孩子还是右孩子 {

        如果是左孩子 p 指向它的左孩子;

        如果是右孩子 p 指向它的右孩子;

    }

    如果没有孩子,判断是否栈空{

        如果栈不空,取栈顶,p指向栈顶元素的右孩子;

        如果栈空,ok = false;

    }

}

然后把队列中的元素输出,即得到的就是二叉树的先序

void PreambleTraverse(LinkTree T) {//T指向树的根节点stack <LinkTree> S;queue <LinkTree> Q;LinkTree p = T;LinkTree q;bool ok = true;while(ok) {if(p -> L && p -> R)S.push(p);Q.push(p);if(p -> L)p = p -> L;else if(p -> R)p = p -> R;else {if(!S.empty()){q = S.top();p = q -> R;S.pop();}elseok = false;}}while(!Q.empty()) {q = Q.front();Q.pop();cout << q -> data;}cout << endl;}


0 0
原创粉丝点击