遍历二叉树

遍历二叉树: 指按某条搜索路径巡防树中每个结点,使得每个结点都被访问一次且仅为一次;

三种遍历情况:

  • 先序遍历二叉树:DLR(先访问根结点,然后访问左子树,最后访问右子树);

递归算法

void inordertraverse(BiTree T)
{      //先序遍历二叉树T的递归算法
if(T)    //若二叉树非空
{
cout<<T->data;    //先访问根节点
inordertraverse(T->lchild);   //在访问左子树
inordertraverse(T->rchild);
}
}

非递归算法

  • 初始化一个空栈S,指针p指向根结点

  • 申请一个结点空间q,用来存放栈顶弹出的元素;

  • 当p非空或者栈S非空时,循环执行以下操作:

  • [? ] 如果p非空,则将p进栈,p指向该节点的根节点

  • [?] 如果p为空,则弹出栈顶元素并访问,将p指向该结点的右孩子;

void inordertraverse(BiTree T)
{
initstack(s);   p=T;
q= new BiTNoede;
while(p||!StackEmpty(S))
  {
    if(p)     //p非空
   {
     Push(S,p);    //根指针进栈
     cout<<p->data;//根指针进栈&#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值