线索二叉树的先序、中序、后序遍历

线索化二叉树: 当某个节点的左孩子为空时,将_pLeft指针指向他的前一个节点; 当某个节点的右孩子为空时,将_pRight指针指向它的后一个结点。根据遍历方式不同,得到的前后节点也不同,线索化二叉树分为三种不同的情况: 先序遍历线索化二叉树 中序遍历线索化二叉树 后序遍历线索化二叉树 线索二叉树与普通二叉树有什么区别呢?线索化二叉树中空的指针域至多2个,至少1个; 普通二叉树中空的指
摘要由CSDN通过智能技术生成

线索化二叉树:
当某个节点的左孩子为空时,将_pLeft指针指向他的前一个节点;
当某个节点的右孩子为空时,将_pRight指针指向它的后一个结点。

根据遍历方式不同,得到的前后节点也不同,线索化二叉树分为三种不同的情况:
先序遍历线索化二叉树
中序遍历线索化二叉树
后序遍历线索化二叉树
线索二叉树与普通二叉树有什么区别呢?线索化二叉树中空的指针域至多2个,至少1个;
普通二叉树中空的指针域是n+1个,n(节点数)。
所以能够有效地利用资源,并且在遍历时不用递归和栈结构也可以遍历。
为了区别两个节点的关系是双亲-孩子节点,还是前驱-后继节点,可以在每个节点创建时 ,增加两个成员变量,_leftThread和_rightThread,这两个变量只有两种状态,LINK(双亲-孩子)、THREAD(前驱=后继)。

#include <iostream>
#include <windows.h>
#include <string.h>
using namespace std;
enum PointIhfo
{
    LINK, 
    THREAD
};
template <class T>
struct BinaryTreeNodeThd//定义二叉树的节点
{
    BinaryTreeNodeThd(const T& value)
        :_value(value)
        ,_pLeft(NULL)
        ,_pRight(NULL)
        ,_pParent(NULL)
        , _leftThread(LINK)
        , _rightTrhead(LINK)
    {}
    T _value;
    BinaryTreeNodeThd<T>* _pLeft;
    BinaryTreeNodeThd<T>* _pRight;
    BinaryTreeNodeThd<T>* _pParent;
    PointIhfo _leftThread;
    PointIhfo _rightTrhead;
};

这里写图片描述

template<class T>
class BinaryTreeThd
{
    typedef BinaryTreeNodeThd<T> Node;
public:
    BinaryTreeThd()
        :_pRoot(NULL)
    {}
    BinaryTreeThd(const T arr[], size_t size, const T& invalid)
    {
        size_t index=0;
        _CreateBinaryTree(_pRoot, NULL, arr, size, index, invalid);
    }
    BinaryTreeThd(const BinaryTreeThd<T>& bt)
    {
        _pRoot = _CopyBinaryTree(bt._pRoot);
    }
    BinaryTreeThd<T>& operator=(const BinaryTreeThd<T>& bt)
    {
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值