//線索化標誌tag
enum pointertag ;
//結點結構
template
struct binarytreenodethd
};//基類迭代器
template
struct __binarytreeiterator
t& operator*()
t* operator->()
bool
operator ==(const self& s)
bool
operator != (const self& s)
virtual self& operator++() = 0;//純虛函式
};//中序遍歷迭代器
template
struct __binarytreeininterator :public __binarytreeiterator
self& operator++()
else
_node = sub;
}return *this;
}};//前序遍歷迭代器
template
struct __binarytreeprevinterator :public __binarytreeiterator
self& operator++()
else
return *this;
}};//二叉樹的線索化
template
struct binarytreethd
previnterator prevbegin()
previnterator prevend()
ininterator inbegin()
return sub;
}ininterator inend()
void inorder()
void inorderthreading()
protected:
node* _createtree(t* a, size_t n, size_t& index, const t& invalid)
return root;
}void _inorder(node* root)
_inorder(root->_left);
cout
<< root->_data << ' ';
_inorder(root->_right);
}void _inorderthreading(node* root, node*& prev)
if (prev && prev->_right == null)
prev = root;
_inorderthreading(root->_right, prev);
}private:
node* _root;
};
void testbinarytreethd()
; binarytreethd t1(a1, sizeof(a1)/sizeof(a1[0]), '#');
t1.inorder();
t1.inorderthreading();
線索化二叉樹以及遍歷線索化二叉樹
1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...
線索化二叉樹
define crt secure no warnings 1 includeusing namespace std enum pointertag 列舉 其結構如下 void prevorderthreading 前序 void postorderthreading 後序 void inorder...
線索化二叉樹
二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊.二叉樹的結...