資料結構 二叉樹!!!

2021-08-11 14:16:52 字數 3679 閱讀 4075

二叉樹的性質

若二叉樹根結點的層數為1,那麼這個非空二叉樹的第i層最多有2^(i-1)個結點。

若根節點二叉樹的深度為1,那麼深度為k的二叉樹的最大結點數是2^k-1;

對於任何一棵二叉樹,如果葉節點個數為n0,度為2的非葉節點的個數為n1,那麼n0 = n1+1;

二叉樹的基本操作:

二叉樹的遍歷

前序:

中序:

結果:d b e a f c

後序:

結果:d e b f c a

層序:

結果:a b c d e f

【二叉樹的基本操作**】

#include

#include

using namespace std;

template

t>

struct

treenode

treenode(t& d)

:lefttree(null)

,righttree(null)

,data

(d) {}

treenode(const treenode& t)

:lefttree(t.lefttree)

,righttree(t.righttree)

,data

(t.data)

{}treenode

* lefttree;

treenode

* righttree;

tdata;

};template

t>

class

binarytree

}binarytree

(binarytree

& t) //copy construction

node* _copytree(node *root2) //copy tree

void preprint

() //print by front

void _preprint(node* root)}}

void inorder

()

tmp = s.top();

cout

s.pop();

tmp = tmp->righttree;}}

void backorder

()

tmp = s.top();

if(null == tmp->righttree || flag == tmp->righttree)

else

tmp = tmp->righttree;}}

/* void preorder_nor

() //非遞迴前序遍歷}}

void inorder

() //非遞迴中序遍歷

tmp = s.top();

s.pop();

cout

tmp = tmp->righttree;}}

void backorder

() //非遞迴後序遍歷

tmp = s.top();

if(null == tmp->righttree || flag == tmp->righttree)

else

tmp = tmp->righttree;}}

*/ void midprint

() //print by mid

void _midprint(node *root)

void backprint

() //print by back

void _backprint(node * root)

void floorprint

() //

}size_t depthoftree

() //get tree depth

size_t _depthoftree(node* root)

size_t leafofkfloortree(size_t

k) //find

k floor node

size_t _leafofkfloortree(node *root,size_t& k,size_t

leafnum)

_leafofkfloortree(root->lefttree,k,leafnum+1);

_leafofkfloortree(root->righttree,k,leafnum+1);

return num;

}size_t getleafnum

()

size_t _getleafnum(node* root)

size_t leafnum() //get

tree leaf count

size_t _leafnum(node *root)

node* find

(t& d) //find object data

node * _find(node *root,t& d)

node* leftchild(node* pos) //get left child node

node* _leftchild(node* root,node* pos)

node* rightchild(node* pos) //get right child node

node* _rightchild(node* root,node* pos)

node* parentnode

(node* pos) //get parent node

node* _parentnode(node* root,node* pos)

size_t size

() //get

tree node count

size_t _size(node* root)

binarytree& operator=(const

binarytree& b)

return *this;

}~binarytree

()

private:

void destorytree

(node *del)

node* greattreenode

(node* root,t* arr,size_t

n,size_t& index,t& invalid)

return root;

}node *_root;

};

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

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

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...