資料結構 二叉樹 1

2021-07-12 04:27:31 字數 2751 閱讀 1457

二叉樹

構建:二叉樹的構建採用的是先序遍歷,->先儲存根節點然後左右節點,用遞迴的思想將所有資料放在樹中。

**實現:實現了4種訪問方法,先序,中序,後序,和層序的訪問方法都採用遞迴的方式。

#include#include#includeusing namespace std;

templatestruct rootnode

};template class binarytree

~binarytree()

binarytree(binarytree &t)

binarytree& operator=(binarytree t) }

void fastorder()

void inorder()

void postorder()

void levelorder()

q.push(_root);

while (!q.empty())

if (root->_rightnode != null)

} } int leafnum()

int size()

int depth()

void n***storder()

while (!s.empty())

if (front->_leftnode != null)

}} void nrinorder()

if (top != s.top()->_rightnode)

else

}} void nrpostorder()

if (s.top()->_rightnode != null&&top != s.top()->_rightnode)

else

} }protected:

rootnode* _binarytree(t *&str)

return root;

} void _fastorder(rootnode*&root)

else

}void _inorder(rootnode*root)

_inorder(root->_leftnode);

cout << root->_value;

_inorder(root->_rightnode);

} void _postorder(rootnode*root)

_postorder(root->_leftnode);

_postorder(root->_rightnode);

cout << root->_value;

} void _clear(rootnode*root)

rootnode*tmp = root->_leftnode;

rootnode*tmp2 = root->_rightnode;

delete root;

_clear(tmp);

_clear(tmp2);

} rootnode* _copy(rootnode*root)

newroot = new rootnode(root->_value);

newroot->_leftnode = _copy(root->_leftnode);

newroot->_rightnode = _copy(root->_rightnode);

return newroot;

} int _size(rootnode*root,int &size)

size++;

_size(root->_leftnode,size);

_size(root->_rightnode,size);

return size;

} int _depth(rootnode*root)

int hight = 1;

int left = 0;

int right = 0;

left += _depth(root->_leftnode) + hight;

right += _depth(root->_rightnode) + hight;

if (left > right)

else

} int _leafnum(rootnode* root,int &num)

if (root->_leftnode == null&&root->_rightnode == null)

_leafnum(root->_leftnode, num);

_leafnum(root->_rightnode, num);

return num;

}private:

rootnode*_root;

};void test1()

{ char *str = "123##45##6##78###";

binarytreeb1(str);

binarytreeb2(b1);

binarytreeb3 = b2;

b1.fastorder();

cout << endl;

b1.inorder();

cout << endl;

b1.postorder();

cout << endl;

b2.fastorder();

cout << endl;

b3.fastorder();

cout << endl;

cout << b3.size()<

本文出自 「痕跡」 部落格,請務必保留此出處

資料結構 樹之二叉樹(1)

二叉樹中,每個結點的度不大於2,並且,二叉樹的子樹有左右之分,其次序不能任意顛倒。注意 二叉樹只限制了度,而沒有對結點的元素之間的順序進行限定,空二叉樹指沒有結點的二叉樹 在計算機裡,存在乙個樹結構型別的指標,但是該指標指向null 而不是有根節點但是根結點沒有結點元素。我們通常會對二叉樹的結點按照...

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...