一. 樹的基本概念
樹(tree)是n(n>=0)個結點的有限集。它有唯一的根(1結點)和若干顆互不相交的子樹(如圖上子樹5、11、12等)組成。
接下來以上面樹為例子介紹樹的基本術語。
二. 樹的儲存結構
順序儲存結構:
假設以一組連續空間儲存數的結點,同時在每個結點中,附設乙個指示器指示其雙親結點到鍊錶中的位置。
示意圖:
**實現:
/* 樹的雙親表法結點結構定義*/
#define max_tree_size 100
typedef int elemetype;
typedef struct ptnodeptnode;
typedef struct ptree;
特點:
鏈式儲存結構:
//二叉樹鏈式儲存結構定義
typedef struct btnodebtnode;
三. 二叉樹的遍歷
//二叉樹先序遍歷 - 遞迴
void preorder(btnode *p)
}//二叉樹中序遍歷 - 遞迴
void inorder(btnode *p)
}//二叉樹中後序遍歷 - 遞迴
void postorder(btnode *p)
}
四. 構造二叉樹根據 先序遍歷 + 中序遍歷 或 中序遍歷 + 後序遍歷 可以構造乙個二叉樹:
//根據前序序列,中序序列構造二叉樹
//引數:前序序列 中序序列 序列長度
btnode *createbt(elemtype *pre, elemtype *in, int n)
五.求結點數
//計算二叉樹的結點數
int nodenum(btnode *p)
//計算二叉樹的葉子結點數
int lastnodenum(btnode *p)
else
return 0;
}
#include #include using namespace std;
typedef char elemtype ;
//二叉樹鏈式儲存結構定義
typedef struct btnodebtnode;
//根據前序序列,中序序列構造二叉樹
//引數:前序序列 中序序列 序列長度
btnode *createbt(elemtype *pre, elemtype *in, int n)
//訪問函式
void visit(btnode *p)
//二叉樹先序遍歷 - 遞迴
void preorder(btnode *p)
}//二叉樹中序遍歷 - 遞迴
void inorder(btnode *p)
}//二叉樹中後序遍歷 - 遞迴
資料結構 樹與二叉樹
一 性質 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 特點...