当某节点的左指针为空时,令该指针指向按照某种方式遍历二叉树时得到该节点的前驱结点;当某节点的右指针为空时,令该指针指向按照某种方式遍历二叉树时得到该节点的后继结点。但问题是无法区分:左指针指向的结点是左孩子结点还是前驱结点,右指针指向的结点是右孩子结点还是后继结点。因此需要增加两个线索标志位来区分这两种情况:
#pragma once
#include <iostream>
using namespace std;
template<class T>
struct Node
{
Node(const T& data)
:_data(data)
, _lChild(NULL)
, _rChild(NULL)
, _leftThread(false)
, _rightThread(false)
{}
T _data;
Node<T>* _lChild;
Node<T>* _rChild;
Node<T>* _Parent;
bool _leftThread;
bool _rightThread;
};
template<class T>
class ThreadBinary
{
typedef Node<T> Node;
public:
ThreadBinary()
:_root(NULL)
, _IsThread(