二叉樹的性質
若二叉樹根結點的層數為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.二叉樹的實現 有兩種實現方式,...