二叉树的前序、中序、后序线索化及遍历-创新互联
前序线索化:

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 << cur->_data << " ";
cur = cur->_left;
}
cout << cur->_data << " ";
cur = cur->right;
//
// while(cur->_rightTag == THREAD)
// {
// cur = cur->_right;
// cout << cur->_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 << cur->_data << " ";
//访问连续后继
while(cur->_rightTag == THREAD)
{
cur = cur->_right;
cout << cur->_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;
}后序遍历:
采用三叉链 或写一个查找根节点的方法
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
分享题目:二叉树的前序、中序、后序线索化及遍历-创新互联
文章分享:http://www.jxjierui.cn/article/djpiid.html


咨询
建站咨询
