中序遍历

void   inorder(node   *root)  
  {  
              if   (root!=NULL)   //如果当前的节点为空就不用遍历  
                          {    
                                          inorder(root->llink);     //   中序遍历左子树  
                                          printf("/t%c",root->info);     //   访问当前节点  
                                          inorder(root->rlink);     //   中序遍历右子树  
                          }  
  }   
  a  
                      b                 c  
                d                   e         f  
                      g  
  一开始root="a",因为不为空,所以执行inorder(root->llink);这时自我调用,root已变成了a的左结点b了,(同时a入栈)再向下执行,再次碰到inorder(root->llink),root又变成了d(b入栈);再调用inorder(root->llink),root为NULL(d入栈)。这时碰到函数结束},开始出栈,出来第一个是d(此时的root值也恢复为d).再向下执行inorder(root->rlink),以g为root......  
  总之你要画好进出栈的图,就很好理解了,每次调用两个inorder函数时,root的值被改变,同时进栈,碰到整个函数的结束}时,就该从栈顶弹元素了,弹出的元素就放在root中。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值