求一个用c语言实现二叉树的非递归中序遍历完整程序。(用栈实现)。谢谢!

本人才疏学浅所以需要一定注释。变量名别太复杂。我知道我的要求很多,真的劳烦各位了。我主要是在入栈的地方不太明白,所以希望哪里注释多一点... 本人才疏学浅所以需要一定注释。变量名别太复杂。我知道我的要求很多,真的劳烦各位了。
我主要是在入栈的地方不太明白,所以希望哪里注释多一点
展开
 我来答
重教桃李笑开2
2018-08-13 · TA获得超过421个赞
知道小有建树答主
回答量:492
采纳率:65%
帮助的人:226万
展开全部
//但是你栈从哪里来。。。。自己写一个吗
void InOrderRecur(Tree* tree)
{    
     while(!sta.empty()) sta.pop();    
     while(!sta.empty() || tree!=NULL)
      {        
      if(tree==NULL)  
      {
            Tree* cur = sta.top();
            sta.pop();
            cout<<cur->data<<" ";
            tree=cur->rson;
        } else {
            sta.push(tree);
            tree=tree->lson;
        }
    }
}
  • 1.申请一个栈,头结点为开始节点(当前节点)

  • 2.如果当前节点不为空,那么将左节点压栈,即做tree=tree->lson操作,如果当前节点为空的时候打印栈顶元素,并且出栈,将 当前节点变为栈顶元素的右节点也就是做tree = cur->rson(中序遍历中,栈主要保存的是父节点元素)

  • 3.不断重复步骤2直到栈空,结束程序!

追问
嗯。就是压榨传参不太明白,刚刚弄明白了!感谢。是的,最近在学数据结构所以想之间实现stl里面的东西。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式