二叉树前序中序后续线索树_二叉树的前序、中序、后序线索化及遍历

这篇博客详细介绍了二叉树的前序、中序和后序线索化过程,以及相应的线索二叉树遍历算法。通过线索化,可以更高效地进行树的遍历操作,特别是在没有额外空间的情况下。前序遍历和中序遍历分别通过处理左、右线索来访问节点,而后续遍历则涉及到三叉链的处理或使用特定查找方法。
摘要由CSDN通过智能技术生成

前序线索化:void _PrevOrderThreading(Node *cur, Node *& prev)

{

if(cur == NULL)

{

return;

}

if(cur->_left == NULL)

{

cur->_leftTag == THREAD;

cur->_left = prev;

}

if(prev && prev->_right == NULL)

{

prev->_rightTag = THREAD;

prev->_right = cur;

}

prev = cur;

_PrevOrderThreading(cur->_left, prev);

_PrevOrderThreading(cur->right, prev);

}

前序遍历:void PrevOrderThd()

{

Node *cur = _root;

while(cur)

{

while(cur->_leftTag == LINK)

{

cout <_data <

cur = cur->_left;

}

cout <_data <

cur = cur->right;

//

//      while(cur->_rightTag == THREAD)

//      {

//          cur = cur->_right;

//          cout <_data <

//      }

//      if(cur->_leftTag == LINK)

//      {

//          cur = cur->_left;

//      }

//      else

//      {

//          cur = cur->_right;

//      }

}

}

中序线索化:void _InOrderThreading(Node *cur, Node *& prev)

{

if(cur == NULL)

{

return;

}

_InOrderThreading(cur->_left, prev);

//线索化

if(cur->_left == NULL)

{

cur->_leftTag = THREAD;

cur->_left = prev;

}

if(prev && prev->_right == NULL)

{

prev->_rightTag = THREAD;

prev->_right = cur;

}

prev = cur;

_InOrderThreading(cur->_right, prev);

}

中序遍历:void InOrderThd()

{

Node *cur = _root;

while(cur)

{

//找最左节点

while(cur->_leftTag == LINK)

{

cur = cur->_left;

}

cout <_data <

//访问连续后继

while(cur->_rightTag == THREAD)

{

cur = cur->_right;

cout <_data <

}

cur = cur->_right;

}

}

后序线索化:void _PostOrderThreading(Node *root, Node *&prev)

{

if (root == NULL)

{

return;

}

_PostOrderThreading(root->_LChild, prev);

_PostOrderThreading(root->_RChild, prev);

if (root->_LChild == NULL)

{

root->_LTag = THREAD;

root->_LChild = prev;

}

if (prev->_RChild == NULL)

{

prev->_RTag = THREAD;

prev->_RChild = root;

}

prev = root;

}

后序遍历:采用三叉链

或写一个查找根节点的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值