二叉树中序非递归遍历算法和构造二叉线索树算法的理解

二叉树中序非递归遍历算法:

                             先将左子树放进栈中,无左子树时出栈,从右子树开始,继续对右子树循环。 

             代码如下:

void inOrder2(BinTree *root)      //非递归中序遍历
 2 {
 3     stack<BinTree*> s;
 4     BinTree *p=root;
 5     while(p!=NULL||!s.empty())
 6     {
 7         while(p!=NULL)
 8         {
 9             s.push(p);
10             p=p->lchild;
11         }
12         if(!s.empty())
13         {
14             p=s.top();
15             cout<<p->data<<" ";
16             s.pop();
17             p=p->rchild;
18         }
19     }    
20 } 

                        可以这么理解:此算法的排序,对于每一个结点,其左结点一定在其父母结点前面,右结点一定在其父母结点后面,符合此条件的排序只有中序排序。

 二叉线索树构造:其中的pre是一个全局变量,将递归分解成小子量看,每一个小函数中,其pre都不断变化,且都满足是下一个即将进行的函数结点pre。

         代码如下:

bithptr*pre=NULL; /*全程变量*/
voidINTHREAD(bithptr*p)
{
if (p!=NULL)
{
if (p->ltag==0)
INTHREAD(p->lchild); /*左子树线索化*/
if (p->lchild==NULL)
{
p->ltag=1;
p->lchild=pre;
}
if (p->rchild==NULL)
p->rtag=1;
if (pre!=NULL&&pre->rtag==1)
pre->rchild=p;
pre=p; /*前驱指向当前结点*/
if (p->rtag==0)
INTHREAD(p->rchild); /*右子树线索化*/
}
}

转载于:https://www.cnblogs.com/xuehongyang/p/10520141.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值