二叉樹的線索化

2021-08-03 02:25:30 字數 2432 閱讀 6478

二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只 能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。

為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊。

線索化實現如下:

#pragma once

using namespace std;

enum pointertype

;template struct binarytreenodethd

};template struct binarytreeiterator

ref operator*()

ptr operator->()

self operator++(int)

self& operator++()

else

_node = left;

} return *this;

} self operator--(int)

self& operator--()

else

_node = right;

} reurn *this;

} bool operator!=(const self &s)const

node* _node;

};template class binarytreethd

//中序線索化

void inorderthreading()

//中序線索化遍歷

void inorderthd()

cout << cur->_data << " ";

if (cur->_righttype == link)

else

cout << cur->_data << " ";

}cur = cur->_right;

}} cout << endl;

} //前序線索化

void prevorderthreading()

//前序線索化遍歷

void prevorderthd()

cout << cur->_data << " ";

cur = cur->_right;

} cout << endl;

} void prevorder()

iterator begin()

return iterator(cur);

} iterator end()

protected:

node* _createbinarytree(t* a,size_t n,const t& invalid,size_t& index)

return root;

} //中序線索化

void _inorderthreading(node* cur,node* &prev)

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

prev = cur;

_inorderthreading(cur->_right, prev);

} //前序線索化

void _prevorderthreading(node* cur, node* & prev)

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

prev = cur;

if (cur->_lefttype == link)

if (cur->_righttype == link)

}void _prevorder(node* root)

protected:

node* _root;

};void testbinarytreethd()

; binarytreethdt1(array,sizeof(array)/sizeof(array[0]),'#');

t1.inorderthreading();

t1.inorderthd();

binarytreethd::iterator it = t1.begin();

while (it != t1.end())

cout << endl;

binarytreethdt2(array, sizeof(array) / sizeof(array[0]), '#');

t2.prevorderthreading();

t2.prevorderthd();

}

(C )二叉樹的線索化 線索二叉樹

線索化標誌tag enum pointertag 結點結構 template struct binarytreenodethd 基類迭代器 template struct binarytreeiterator t operator t operator bool operator const sel...

線索化二叉樹以及遍歷線索化二叉樹

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...