1.結點:
2.結點的度:分支的個數(子樹的個數)
3.樹的度:樹中所有結點的度的最大值
4.葉子結點:度為零的結點
5.分支結點:度大於零的結點(包含根和中間結點)
6.(從根到結點的)路徑:由從根到該結點所經分支和結點構成;
7.結點的層次:假設根結點的層次為1,則根的孩子為第2層,如果某節點在第l層,則其子樹的根在l+1層。
8.樹的深度:樹中葉子結點所在的最大層次;
二叉樹或為空樹,或是由乙個根結點加上兩棵分別稱為左子樹和右子樹的、互不交的二叉樹組成。(樹的度最大為2)
二叉樹的重要性質:
性質1:在二叉樹的第i層上至多有2^(i-1)個結點(i≥1);
性質2:深度為 k 的二叉樹上至多含 (2^k)-1個結點(k≥1);
性質3:對任何一棵二叉樹,若它含有n0 個葉子結點(0度結點)、n2 個度為 2的結點,則必存在關係式:n0 = n2+1。
兩類特殊的二叉樹:
滿二叉樹:指的是深度為k且含有(2^k)-1個結點的二叉樹。
完全二叉樹:樹中所含的 n 個結點和滿二叉樹中編號為 1 至 n 的結點一一對應。(編號的規則為,由上到下,從左到右。如上圖所示)
完全二叉樹的特點:
1.葉子節點出現在最後2層
2.對於任意結點,若其右分支下的子孫的最大層次為l,則左分支下的子孫的最大層次為l或l+1;
性質4:具有n個結點的完全二叉樹的深度為[logn](向下取整)+1。
性質5:
若對含
n 個結點的完全二叉樹從上到下且從左至右進行
1 至
n 的編號,則對完全二叉樹中任意乙個編號為
i 的結點:
(1) 若 i=1,則該結點是二叉樹的根,無雙親,否則,編號為 [i/2](向下取整)的結點為其雙親結點;
(2) 若 2i>n,則該結點無左孩子,否則,編號為 2i 的結點為其左孩子結點;
(3) 若 2i+1>n,則該結點無右孩子結點,否則,編號為2i+1 的結點為其右孩子結點。
說明:
由於這篇部落格僅僅是為了演示二叉樹的理論, 因此**所做的封裝性以及可用性都不理想, 但由於在實際應用中, 也基本上不可能這樣直接的使用二叉樹, 因此也就沒怎麼優化他, 在此首先給大家說聲抱歉;
二叉樹節點構造
template class treenode
type data;
treenode *leftchild;
treenode *rightchild;
};
二叉樹構造:
template class binarytree
bool isempty() const
//先序遍歷
void preorder() const
//中序遍歷
void inorder() const
//後續遍歷
void postorder() const
//層次遍歷
void levelorder() const;
private:
void preorder(const treenode*rootnode) const;
void inorder(const treenode*rootnode) const;
void postorder(const treenode*rootnode) const;
void visit(const treenode*node) const;
//因為此處僅僅是為了演示, 因此將之定義為public
public:
treenode*root;
};
先(根)序的遍歷演算法:1.若二叉樹為空,則直接返回;
2.否則
(1)訪問根結點(visit);
(2)先序遍歷左子樹;
(3)先序遍歷右子樹;
//實現
template void binarytree::preorder(const treenode*subtree) const
}
中(根)序的遍歷演算法:1.若二叉樹為空樹,則空操作;
2.否則
(1)中序遍歷左子樹;
(2)訪問根結點;
(3)中序遍歷右子樹。
//實現
template void binarytree::inorder(const treenode*subtree)const
}
後(根)序的遍歷演算法:1.若二叉樹為空樹,則空操作;
2.否則
(1)後序遍歷左子樹;
(2)後序遍歷右子樹;
(3)訪問根結點。
//實現
template void binarytree::postorder(const treenode*subtree)const
}
層次遍歷演算法與visit操作:
template void binarytree::levelorder() const
}
template void binarytree::visit(const treenode*currentnode) const
二叉樹構造與運用示例構造一顆如下的二叉樹:
//**如下
int main()
遍歷演算法的應用舉例1.統計二叉樹中葉子結點的個數(先序遍歷)
2.求二叉樹的深度(後序遍歷)
3.複製二叉樹(後序遍歷)
資料結構 樹與二叉樹
一 性質 1 在二叉樹中,第i層的結點總數不超過2 i 1 2 深度為h的二叉樹最多有2 h 1個結點 h 1 最少有h個結點 3 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0 n2 1 4 具有n個結點的完全二叉樹的深度為int log2n 1 5 給定n個節點,能...
資料結構 樹與二叉樹
1 樹的定義 樹是一種 非線性的資料結構。樹是n n 0 個結點的有限集,在任意一棵非空樹中 1 有且僅有乙個特定的被稱為 根 root 的結點 2 當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是一棵樹,並且稱為根的 子樹 subtree 3 每棵子樹也是由唯一的根結...
資料結構 樹與二叉樹
樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的子樹 subtree 特點...