二叉树的周游方法(1)

//先根次序周游 非递归
void nPreOrderE(BinTree t)
{
  Stack s;
  BinTreeNode *c;
  if(t == NULL) return ;
  s = createNullStack(); //创建存储的空链栈
  push(s,t); //树根进栈
  while(!isEmptyStack(s)){
    c = top(s); //顶部出栈
    pop(s);
    if(c!=NULL){
      visit(root(c)); //周游根节点
      push(s,rightChild(c)); //右节点进栈
      push(s,leftChild(c)); //左节点进栈(后进先出)
    }
  }
}
//对称序周游 非递归
void nInOrder(BinTree t){
  Stack s = createNullStack();
  BinTree c = t;
  do{
    while(c!=NULL) {push(s,c); c = leftChild(c);} //遍历左子树,一直到最左的左子树
    c = top(s);
    pop(s); //弹出最左子树
    visit(root(s)); //周游
    c = rightChild(c); //最左子树是否有右节点
  }while(!isEmptyStack(s)||c!=NULL);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值